+
    Dj g                         ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ]P                  ! ]P                  P                  4        ! R R4      t ! R R4      tR# )    N)get_mac_vendorc                   d   a  ] tR t^t o RtRR ltR tR tR tR t	R t
R tR	 t. 3R
 ltRtV tR# )MikrotikAPILegacyzTImplementasi klien soket API MikroTik RouterOS v6/v7 bawaan (Tanpa dependensi luar).c                D    Wn         W n        W0n        W@n        R V n        R # N)ipusernamepasswordportsocket)selfr   r	   r
   r   s   &&&&&LC:\Users\sesar\.gemini\antigravity\scratch\lan-guardian\router_controller.py__init__MikrotikAPILegacy.__init__   s      	    c                    \         P                   ! \         P                  \         P                  4      V n         V P                   P                  R 4       V P                   P	                  V P
                  V P                  34       V P                  R.4       V P                  4       p\        V4      ^ 8  d   V^ ,          R8X  d   R# RpV F%  pVP                  R4      '       g   K  VR,          pK'  	  V'       d   ^ RIp^ RIpVP                  4       pVP                  R4       VP                  V P                  P!                  R	4      4       VP                  VP#                  V4      4       VP%                  4       pV P                  RR
V P&                   2RV 2.4       V P                  4       p\        V4      ^ 8  d   V^ ,          R8X  d   R# R#   \(         d   p	\+        RT	 24        Rp	?	R# Rp	?	ii ; i)      @z/login!doneT z=ret=:   NNN    utf-8z=name=z=response=00Fz Mikrotik API Connection failed: )r   AF_INETSOCK_STREAM
settimeoutconnectr   r   write_sentenceread_sentencelen
startswithhashlibbinasciimd5updater
   encode	unhexlify	hexdigestr	   	Exceptionprint)
r   response	challengewordr!   r"   hashermd5_hex
login_respes
   &         r   r   MikrotikAPILegacy.connect   s   $	 --8J8JKDKKK""3'KK$)) 45 
+))+H8}q Xa[G%; I ??7++ $RI !  g&dmm227;<h00;< **,##X/G<X_W`Ia$bc!//1
z?Q&:a=G+C 	4QC89	s+   CG G (G =CG G:!G55G:c                b    V P                   '       d   V P                   P                  4        R # R # r   )r   close)r   s   &r   r3   MikrotikAPILegacy.close<   s     ;;;KK r   c                   VP                  R 4      p\        V4      pV^8  d   \        P                  ! RV4      pMqVR8  d    \        P                  ! RVR,          4      pMKVR8  d'   \        P                  ! RVR,          4      R,          pM\        P                  ! RVR	,          4      pV P                  P                  WB,           4       R
# )r   Bi @  z!Hi   i    z!Il           NNl      @ N)r%   r   structpackr   sendall)r   r,   
word_byteslengthheaders   &&   r   
write_wordMikrotikAPILegacy.write_word@   s    [[)
Z D=[[f-Ff_[[v7Fh[[v
':;B?F[[v
':;FF/0r   c                p    V F  pV P                  V4       K  	  V P                  P                  R 4       R# )r   N)r?   r   r;   r   sentencer,   s   && r   r    MikrotikAPILegacy.write_sentenceP   s*    DOOD! G$r   c                   V P                   P                  ^4      pV'       g   ^ # V^ ,          pV^,          ^ 8X  d   V# V^,          ^8X  d:   V P                   P                  ^4      ^ ,          pV^?,          ^,          V,           # V^,          ^8X  dO   V P                   P                  ^4      pV^,          ^,          V^ ,          ^,          ,           V^,          ,           # V^,          ^8X  dd   V P                   P                  ^4      pV^,          ^,          V^ ,          ^,          ,           V^,          ^,          ,           V^,          ,           # ^ # )r8   )r   recv)r   bb1b2s   &   r   read_lenMikrotikAPILegacy.read_lenU   s	   KKQqTI$I4iD !!!$Q'B$Y1$**4iD !!!$B$Y2%"Q%1*51==4iD !!!$B$Y2%"Q%2+6"Q%1*E1MMr   c                    V P                  4       pV^ 8X  d   R# Rp\        V4      V8  d?   V P                  P                  V\        V4      ,
          4      pV'       g   M
W#,          pKN  VP	                  RRR7      # )r   r   r   r   ignoreerrors)rJ   r   r   rF   decode)r   r=   datachunks   &   r   	read_wordMikrotikAPILegacy.read_wordg   se    Q;$i& KK$$Vc$i%78EMD{{78{44r   c                b    . p V P                  4       pVR8X  d    V# VP                  V4       K.  )Tr   )rS   appendrB   s   &  r   r   MikrotikAPILegacy.read_sentences   s3    >>#Drz OOD!r   c                   V P                   '       g   . # V.V,           pV P                  V4       . p V P                  4       pV'       g    V# V^ ,          R8X  d|   / pVR,           FY  pVP                  R4      '       g   K  VR,          P	                  R^4      p\        V4      ^8X  g   KG  V^,          Wh^ ,          &   K[  	  VP                  V4       K  V^ ,          R8X  d    V# V^ ,          R8X  g   K  \        RV 24        V# )z6Menjalankan perintah API dan mengembalikan array data.z!rer7   =r   z!trapzMikrotik API trap error: )r   r   r   r    splitr   rV   r)   )	r   cmdqueriesrC   resultsrespitemr,   partss	   &&&      r   executeMikrotikAPILegacy.execute|   s    {{{I57?H%%%'D  Aw% HHDs++ $RsA 6u:?-21XDqN	 %
 t$aG#  aG#1$89r   )r   r
   r   r   r	   N)"  )__name__
__module____qualname____firstlineno____doc__r   r   r3   r?   r   rJ   rS   r   ra   __static_attributes____classdictcell____classdict__s   @r   r   r      s@     ^%N 1 %
$
5 $&  r   r   c                   L   a  ] tR t^t o RtR
R ltR tR tR tR t	R t
RtV tR	# )RouterControllerz8Manajer kontrol terpadu untuk MikroTik dan IndiHome ONT.c                4   Wn         W0n        W@n        R V n        RV9   d9   VP	                  R4      pV^ ,          V n         \        V^,          4      V n        MW n        WPn        ^V n	        RV P
                   R2V n
        R#   \         d
    YPn         L1i ; i)F:https://z/restN)router_typer	   r
   is_connectedrZ   r   intr   
ValueErrorssh_portrest_base_url)r   rr   r   r	   r
   r   r`   s   &&&&&& r   r   RouterController.__init__   s    &  ! "9HHSMEAhDG!aM	 GI'y6  ! 	!s   B BBc           	     	   V P                   R8X  d
   RV n        R*# V P                  '       g   R+# V P                   R8X  Ed   V P                  '       d   RV P                   RV P                   R2MRV P                  '       d   R	V P                   RV P                   R2MRR	V P                   R2RV P                   R2.pV Uu. uF  q"'       g   K  VNK  	  ppV F  p \        P
                  ! W0P                  V P                  3R
RR7      pVP                  ^8X  d   RV n        VP                  R^4      ^ ,          V n
        VP                  4       pVP                  RR4      pVP                  R4      ^ ,          P                  4       pVP                  R4      ^,          P                  R4      ^ ,          pRRV RV RV R23u # K  	  V P                  '       d    V P                  ^8w  d   V P                  R.MR.p	V	 F  p
 \        V P                  V P                  V P                  V
R7      pVP!                  4       '       dY   RV n        VP#                  R4      pVP%                  4        RpV'       d   V^ ,          P                  RR4      pRRV RV
 R23u # K  	  V P                  '       d    V P                  ^8w  d   V P                  ^.M^.pV EF   p \&        P(                  ! 4       pVP+                  \&        P,                  ! 4       4       VP!                  V P                  WP                  V P                  R
R7       VP/                  R4      w  pppVP1                  4       P3                  RRR7      pVP%                  4        RV9   dc   RV n        Wn        R pVP7                  4        F2  pRV9   g   K  VP                  R4      R,,          P9                  4       pK4  	  RRV R!V R23u # EK#  	  RR"V P                   R#V P                   R$23# V P                   R%8X  d3    RV P                   R2p\        P
                  ! VR&R'7      pRV n        R-# R.# u upi   \         d     EK  i ; i  \         d     EK  i ; i  \         d     EK  i ; i  \         d    RR(T P                   R)23u # i ; i)/z Mengecek konektivitas ke router.	simulatedTFmikrotikzhttp://rp   z/rest/system/resourceNrq   r   authtimeoutverify/versionzv7.xz://zTerhubung ke MikroTik vz via REST API ( z).rc   r   /system/resource/printzv6.xz via API Port .r   r	   r
   r~   /system resource printr   rM   rN   zversion:zv6/v7z via SSH Port z>Gagal terhubung ke MikroTik (Pastikan REST API/Webfig di port z aktif, atau SSH Port 22/z
 terbuka).indihome       @)r~   zGerbang IndiHome ONT (z) tidak merespons HTTP port 80.)Tz&Koneksi Simulasi Berhasil (Demo Mode).)FzAlamat IP Router kosong.)Tz3Gerbang IndiHome ONT terdeteksi (Web Portal aktif).)FzTipe router tidak dikenal.)rr   rs   r   r   requestsgetr	   r
   status_codersplitrw   jsonrZ   upperr(   r   r   ra   r3   paramiko	SSHClientset_missing_host_key_policyAutoAddPolicyexec_commandreadrP   rv   
splitlinesstrip)r   	rest_urlsuurlresrQ   r   protoport_strlegacy_portslportapires_data	ssh_portssportclientstdinstdoutstderrres_outverlines   &                     r   test_connection RouterController.test_connection   s   {* $DAAwww44 z) IM			'$''!DII;.CDW[IM(477)1TYYK/DEX\477)#89$''"78	I %.3IqII3 ",,s--1OY\ejkC#-,0)-0ZZQ-?-B*"xxz"&((9f"= #		% 0 3 9 9 ;#&99U#3A#6#<#<S#A!#D#'>wiW\V]]^_g^hhj%kkk . ! 15			dii2oDIIt,TXSYL%+DGGT]]DMMX]^C{{}},0)#&;;/G#H		"(#&.qkooi&HG#'>wi~V[U\\]%^^^ % & ,0999bBrdI"%//1F66x7M7M7OPNN477Y]YfYfpsNt,2,?,?@X,Y)E66$kkm22782LGLLN!W,,0)(-%$+$6$6$8D)T1&*jjob&9&?&?&A %9  $'>se>RWQXXY%ZZZ - #& Z[_[d[dZee~  @D  @I  @I  J  JT  U  U  U +	`y*ll34$(!RR
 32I 4 !   ! * !   ` 6twwi?^___`sc   	Q(Q(!C(Q-
A4R ?#R $CR4R50R& -Q=<Q= RRR#"R#&SSc                (   V P                   '       d   V P                  R8X  d1   ^ RIpRRRVP                  ^^4      RVP                  ^^#4      RRR	R
/# V P                  R8X  Edc    V P                   R2p\
        P                  ! W P                  V P                  3RRR7      pVP                  ^8X  d   VP                  4       p\        VP                  R^4      4      p\        VP                  R^4      4      p\        WV,
          V,          ^d,          4      pRRR\        VP                  R^ 4      4      RVRVP                  RR4      R	VP                  RR4      /#  \        V P                  V P                  V P                  V P                   ^8w  d   V P                   MRR7      pVP#                  4       '       d   VP%                  R4      p	VP'                  4        V	'       d   V	^ ,          p
RRR\        V
P                  R^ 4      4      R\        \        V
P                  R^d4      4      \        V
P                  R^ 4      4      ,
          \        V
P                  R^d4      4      ,          ^d,          4      RV
P                  RR4      R	V
P                  RR4      /#  \(        P*                  ! 4       pVP-                  \(        P.                  ! 4       4       VP#                  V P                  V P0                  V P                  V P                  RR7       VP3                  R4      w  rpVP5                  4       P7                  RRR7      pVP'                  4        RR V P0                   R!2R^ R^ RRR	R/p^ p^ pVP9                  4        EF  pR"V9   d-   VP;                  R#^4      R3,          P=                  4       VR&   K7  R$V9   d`   VP;                  R#^4      R3,          P?                  R%R&4      P=                  4       pVPA                  4       '       d   \        V4      M^ VR&   K  R'V9   d-   VP;                  R#^4      R3,          P=                  4       VR	&   K  R(V9   d   VP;                  R#^4      R3,          PC                  4       pR)V9   d-   \        VP?                  R)R&4      P=                  4       4      pEK1  R*V9   d4   \        VP?                  R*R&4      P=                  4       4      R+,          pEKk  EKn  R,V9   g   EKx  VP;                  R#^4      R3,          PC                  4       pR)V9   d-   \        VP?                  R)R&4      P=                  4       4      pEK  R*V9   g   EK  \        VP?                  R*R&4      P=                  4       4      R+,          pEK  	  V^ 8  d#   \        WV,
          V,          ^d,          4      VR&   V# V P                  R-8X  d   RR.R^R^*RR/R	R0/# RR1R^ R^ RRR	R2/#   \         d     ELi ; i  \         d     L+i ; i)4z1Mengambil data performa CPU / Memory dari router.rz   NstatuszOnline (Simulasi)cpuramuptimez12 hari, 4 jammodelzMikroTik hEX lite / ZTE F609r{   z/system/resourcer   Fr|   ztotal-memoryzfree-memoryzOnline (REST)zcpu-loadzN/Az
board-nameMikroTikrc   r   r   zOnline (API)r   r   r   rM   rN   zOnline (SSH:)zuptime:rp   z	cpu-load:%r   zboard-name:zfree-memory:mibkibg      @ztotal-memory:r   zOnline (HTTP)z5 hari, 12 jamzZTE F609 ONTOfflineUnknownr   )"rs   rr   randomrandintrw   r   r   r	   r
   r   r   floatrt   r(   r   r   r   r   ra   r3   r   r   r   r   rv   r   r   rP   r   rZ   r   replaceisdigitlower)r   r   r   r   rQ   	total_memfree_memram_pctr   r   rr   r   r   r   r   statsr   cpu_strfree_str	total_strs   &                    r   get_router_stats!RouterController.get_router_stats	  s}      D$4$4$C-v~~a,v~~b"-*7  z)++,,<=ll3mmT]]-KUXafg??c)88:D %dhh~q&A BI$TXXmQ%?@H!I$8I#E"LMG /s488J#:;w $((8U";,
!C  *" $DGGT]]DMM]a]f]fjl]lPTPYPYrvwC{{}};;'?@		 A .s155Q#78sE!%%*D$EaeeTacdNeHf$fjopqpupu  wE  GJ  qK  kL  $L  OR  $R   S !%%%"8|Z!@ #!++-2283I3I3KLtwwT]]T]]]a]j]jtwx(.(;(;<T(U%v ++-..wx.H!\$--#BE1eUVX`bgipr|}	#..0D D(*.**S!*<R*@*F*F*Hh$,"&**S!"4R"8"@"@b"I"O"O"Q7>7H7Hs7|ae&$.)-C);B)?)E)E)Gg'4/#'::c1#5b#9#?#?#A H,',X-=-=eR-H-N-N-P'QH"h.',X-=-=eR-H-N-N-P'QTZ'ZH /(D0$(JJsA$6r$:$@$@$B	 I-(-i.?.?r.J.P.P.R(SI"i/(-i.?.?r.J.P.P.R(SV\(\I' 1( q=#&)=(Jc'Q#RE%L +/rr*  )UAua5'S\]]C  j  s4   'C8W1 "IX AX (AX 1X ?X XXc                
   . pV P                   '       d   V P                  R8X  d   . # V P                  R8X  Ed   . pRp V P                   R2p\        P                  ! W@P
                  V P                  3RRR7      pVP                  ^8X  d   VP                  4       pRpT'       d   T F  pTP	                  RR4      pTP	                  RR4      P!                  4       P#                  RR4      p	TP	                  RRTP#                  RR4       24      p
T'       g   Kt  T	'       g   K~  \%        T	4      pTR8X  d   RpTP'                  RTRT	RTRT
RRRR/4       K  	  T#  \(        P*                  ! 4       pTP-                  \(        P.                  ! 4       4       TP                  T P                  T P0                  T P
                  T P                  RR7       TP3                  R4      w  rpTP5                  4       P7                  RR R!7      pTP3                  R"4      w  pppTP5                  4       P7                  RR R!7      pTP                  4        \9        4       pTP;                  4        EF  pR#T9   g   K  R$T9   g   K  \<        P>                  ! R%T4      p\<        P>                  ! R&T4      p\<        P>                  ! R'T4      pT'       g   Ke  T'       g   Ko  TPA                  ^4      pTPA                  ^4      P!                  4       P#                  RR4      p	T'       d   TPA                  ^4      MRTP#                  RR4       2p\%        T	4      pTR8X  d   R(pTPC                  T4       TP'                  RTRT	RTRTRRRR/4       EK"  	  TP;                  4        EF  pR#T9   g   K  R$T9   g   K  \<        P>                  ! R%T4      p\<        P>                  ! R&T4      pT'       g   KN  T'       g   KX  TPA                  ^4      pTPA                  ^4      P!                  4       P#                  RR4      p	TT9  g   K  TPE                  R)4      '       d   K  TPE                  R*4      '       d   K  \%        T	4      pTR8X  d   R+pTP'                  RTRT	RTRR,TP#                  RR4       2RRRR/4       EK  	  T# V#   \         d    \        T P                  T P
                  T P                  T P                  ^8w  d   T P                  MRR	7      pTP                  4       '       d$   TP                  R
4      pTP                  4        Rp ELi ; i  \         d   p\G        R-T 24        R.p?T# R.p?ii ; i)/z>Mengambil perangkat aktif langsung dari tabel ARP/DHCP router.rz   r{   Fz/ip/dhcp-server/leaser   r|   Trc   r   z/ip/dhcp-server/lease/printaddressr   zmac-address-rp   z	host-namezLAN-Device-r   zUnknown Device/VendorzDHCP Lease MikroTikr   macvendorhostnametypedynamicis_localr   r   z1/ip dhcp-server lease print detail without-pagingr   rM   rN   z#/ip arp print detail without-pagingzaddress=zmac-address=zaddress=([0-9\.]+)zmac-address=([0-9a-fA-F:]+)zhost-name="?([^"\s]+)"?zDHCP Lease MikroTik (SSH)z224.z239.zARP MikroTik (SSH)zIP-z!Error querying MikroTik via SSH: N)$rs   rr   rw   r   r   r	   r
   r   r   r(   r   r   r   r   ra   r3   r   r   r   rV   r   r   r   r   rv   r   r   rP   setr   researchgroupaddr    r)   )r   devicesleasesuse_apir   r   r   lr   r   r   vdrr   r   r   r   dhcp_outstdin2stdout2stderr2arp_out	lease_ipsr   ip_match	mac_matchhn_matchhnr0   s   &                           r   get_devicesRouterController.get_devicesj  s      D$4$4$CIz)FG#++,,ABll3mmT]]-KUXafg??c) XXZF"G Ay"-B%%r288:BB3LC uu[K

3PS@T?U2VWHrcc,S1"99"7C "!3$c&"I&(   X s8C%//1F66x7M7M7OPNN477aeananx{N|,2,?,?@s,t)E6%{{}33GH3MH/5/B/BCh/i,FGW%lln33GH3MGLLN #I ( 3 3 5%-.D2H')yy1F'MH(*		2PRV(WI')yy1KT'RH'xII%-^^A%6&/ooa&8&>&>&@&H&Hc&R:BX^^A%6+VXV`V`adfiVjUkHl&4S&9#&*A#A*EC )b 1 '$("$)3$,c$.$*I$.0" !# !6. !( 2 2 4%-.D2H')yy1F'MH(*		2PRV(WI'xII%-^^A%6&/ooa&8&>&>&@&H&Hc&R#%Y#6r}}V?T?T]_]j]jkq]r]r*8*=C'*.E'E.B$+NN(,b(-s(0#(2c"**S#:N9O4P(.	(2E4& %' !5* wk  #'aeajajnpapTXT]T]vz{;;== [[)FGFIIK"G#f ! C=aSABBCs   A!S   DU 9U A
U U AU #BU -U 63U .U 8AU U U 3A	U  A*U+#UUU9 U44U9c           	     x   VP                  4       P                  RR4      pV P                  R8X  d	   RRV R23# V P                  R8X  Ed    V P                   R2pR	R
RRRVRRV 2/p\        P
                  ! W4V P                  V P                  3RRR7      pVP                  ^8X  g   VP                  ^8X  d   R##  \        V P                  V P                  V P                  V P                  ^8w  d   V P                  MRR7      pVP                  4       '       d/   VP                  RRRRV 2RV 2.4       VP                  4        R$#  \         P"                  ! 4       pVP%                  \         P&                  ! 4       4       VP                  V P                  V P(                  V P                  V P                  RR7       RV RV R2pVP+                  V4       VP                  4        R%# V P                  R8X  d   RR V P                   R!V R"23# R'#   \         d     ELhi ; i  \         d     R&# i ; i)(z6Memblokir akses internet perangkat di firewall router.r   rp   rz   TSimulasi: MAC z berhasil diblokir di firewall.r{   /ip/firewall/filterchainforwardactiondropzsrc-mac-addresscommentBLOCKED BY LAN GUARDIAN: r   F)r   r}   r~   r   rc   r   z/ip/firewall/filter/addz=chain=forwardz=action=dropz=src-mac-address=z"=comment=BLOCKED BY LAN GUARDIAN: r   r   zB/ip firewall filter add chain=forward action=drop src-mac-address=z# comment="BLOCKED BY LAN GUARDIAN: "r   z6Konfigurasi MAC Filter rule terkirim ke IndiHome ONT (z) untuk memblokir r   )Tz9Berhasil memblokir perangkat di Firewall MikroTik (REST).)Tz?Berhasil memblokir perangkat di Firewall MikroTik (API Legacy).)Tz8Berhasil memblokir perangkat di Firewall MikroTik (SSH).)Fz0Koneksi ke MikroTik gagal untuk eksekusi blokir.FzTipe router tidak valid.)r   r   rr   rw   r   postr	   r
   r   r(   r   r   r   r   ra   r3   r   r   r   r   rv   r   )	r   r   	mac_cleanr   payloadr   r   r   r[   s	   &&       r   block_deviceRouterController.block_device  s[   IIK''S1	{*>)4STTTz)++,,?@Yf%y!:9+F	 mmCT]]DMM<Zdgpuv??c)S__-C\\ .D $DGGT]]DMM]a]f]fjl]lPTPYPYrvwC{{}}5$"'	{38D	8  		^^	!++-2283I3I3KLtwwT]]T]]]a]j]jtwxZ[dZe  fI  JS  IT  TU  V##C(WW + QRVRYRYQZZlmvlwwxyyy00G  2  LLs&   A/H B"H* H'&H'*H98H9c                   VP                  4       P                  RR4      pV P                  R8X  d	   RRV R23# V P                  R8X  Edh   RV 2p V P                   R	2p\        P
                  ! W@P                  V P                  3R
RR7      pVP                  ^8X  d   VP                  4       pRpV F-  pVP                  RR4      V8X  g   K  VP                  R4      p M	  V'       d[   V RV 2p	\        P                  ! WP                  V P                  3R
RR7      p
V
P                  ^8X  g   V
P                  ^8X  d   R # \        T P                  T P                  T P                  T P                  ^8w  d   T P                  MRR7      pTP                  4       '       dk   TP!                  RRT 2.4      pT'       d;   T F4  pTP                  R4      pT'       g   K  TP!                  RRT 2.4       K6  	  TP#                  4        R!#  \$        P&                  ! 4       pTP)                  \$        P*                  ! 4       4       TP                  T P                  T P,                  T P                  T P                  RR7       RT R2pTP/                  T4       TP#                  4        R"# V P                  R8X  d   RRV P                   RV R23# R$#   \         d     ELi ; i  \         d     R## i ; i)%z1Membuka blokir akses internet di firewall router.r   rp   rz   Tr   z dilepas blokirnya.r{   r   r   r   Fr|   Nr   r   z.idr   rc   r   z/ip/firewall/filter/printz	?comment=z/ip/firewall/filter/removez=.id=r   r   zC/ip firewall filter remove [find comment="BLOCKED BY LAN GUARDIAN: z"]r   z+MAC Filter rule dihapus dari IndiHome ONT (z) untuk r   )Tz*Blokir dibuka di Firewall MikroTik (REST).)Tz0Blokir dibuka di Firewall MikroTik (API Legacy).)Tz)Blokir dibuka di Firewall MikroTik (SSH).)Fz5Koneksi ke MikroTik gagal untuk eksekusi buka blokir.r   )r   r   rr   rw   r   r   r	   r
   r   r   deleter(   r   r   r   r   ra   r3   r   r   r   r   rv   r   )r   r   r   comment_strr   r   rulesrule_idr   del_urldel_resr   ridr   r[   s   &&             r   unblock_deviceRouterController.unblock_device
  s   IIK''S1	{*>)4GHHHz)5i[AK++,,?@ll3mmT]]-KUXafg??c)HHJE"G"55B/;>&'eeElG! # %(E7)"4"*//'PTP]P]@^hkty"z"..#59L9LPS9S#UU
 $DGGT]]DMM]a]f]fjl]lPTPYPYrvwC{{}}$?Ik]B[A\]"eeEl3KK(Dse}oV # 		OO	!++-2283I3I3KLtwwT]]T]]]a]j]jtwx[\e[ffhi##C(HH +FtwwixXaWbbcddd00C  2  QQs3   A:K K .AK BK- K*)K*-K<;K<)r   rs   r
   r   rw   rr   rv   r	   N)rz   r   r   r      )rd   re   rf   rg   rh   r   r   r   r   r   r  ri   rj   rk   s   @r   rn   rn      s3     B7*V3p_^BeN71r=1 =1r   rn   )r   r9   r   urllib3r   r   network_scannerr   disable_warnings
exceptionsInsecureRequestWarningr   rn    r   r   <module>r     sO        	  *   ++BB CK K\m1 m1r   