Coverage for cuda/core/_device.pyx: 92.87%
477 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-19 01:12 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-19 01:12 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cpython
9from cuda.bindings cimport cydriver
10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN
11from libcpp.vector cimport vector
13import threading
15from cuda.core._context cimport Context
16from cuda.core._context import ContextOptions
17from cuda.core._device_resources cimport DeviceResources, SMResource, WorkqueueResource
18from cuda.core._event cimport Event as cyEvent
19from cuda.core._event import Event, EventOptions
20from cuda.core._memory._buffer cimport Buffer, MemoryResource
21from cuda.core._resource_handles cimport (
22 ContextHandle,
23 GreenCtxHandle,
24 create_context_handle_ref,
25 create_green_ctx_handle,
26 get_primary_context,
27 get_last_error,
28 as_cu,
29)
31from cuda.core._stream import IsStreamType, Stream
32from cuda.core._utils.clear_error_support import assert_type
33from cuda.core._utils.cuda_utils import (
34 ComputeCapability,
35 CUDAError,
36 driver,
37 handle_return,
38 runtime,
39)
40from cuda.core._stream cimport default_stream
42from typing import TYPE_CHECKING
44if TYPE_CHECKING:
45 import cuda.core.system # no-cython-lint
46 from cuda.core.graph import GraphBuilder
47 from cuda.core.texture import (
48 MipmappedArray,
49 MipmappedArrayOptions,
50 OpaqueArray,
51 OpaqueArrayOptions,
52 ResourceDescriptor,
53 SurfaceObject,
54 TextureObject,
55 TextureObjectOptions,
56 )
58# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
59# but it seems it is very convenient to expose them for testing purposes...
60_tls = threading.local()
61_lock = threading.Lock()
62cdef bint _is_cuInit = False
65cdef class DeviceProperties:
66 """
67 A class to query various attributes of a CUDA device.
69 Attributes are read-only and provide information about the device.
70 """
71 cdef:
72 int _handle
73 dict _cache
75 def __init__(self, *args, **kwargs) -> None:
76 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 25I
78 @classmethod
79 def _init(cls, handle: int) -> DeviceProperties:
80 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
81 self._handle = handle 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
82 self._cache = {} 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
83 return self 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
85 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
86 """Retrieve the attribute value directly from the driver."""
87 cdef int val
88 cdef cydriver.CUresult err
89 with nogil: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
90 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
91 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
92 return <int>default
93 HANDLE_RETURN(err) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
94 return val 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
96 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
97 """Retrieve the attribute value, using cache if applicable."""
98 cached = self._cache.get(attr) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9e,BAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
99 if cached is not None: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9e,BAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
100 return cached 22f3f4f5f6f7fFfabYl3p(A+m~lze8e9e,BAe+A,A-AxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h
101 cdef int value = self._get_attribute(attr, default) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
102 self._cache[attr] = value # setdefault not needed for ints 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
103 return value 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcr/z:zcl;zpzezqz=z?z@zrz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfAgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVAWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;c=c?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
105 @property
106 def max_threads_per_block(self) -> int:
107 """int: Maximum number of threads per block."""
108 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2uAWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y+AlBmBnBoBpBqB,ArBsBtBuBvBwB-AxByBzBABBBCB
110 @property
111 def max_block_dim_x(self) -> int:
112 """int: Maximum block dimension X."""
113 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2kA
115 @property
116 def max_block_dim_y(self) -> int:
117 """int: Maximum block dimension Y."""
118 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2lA
120 @property
121 def max_block_dim_z(self) -> int:
122 """int: Maximum block dimension Z."""
123 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2mA
125 @property
126 def max_grid_dim_x(self) -> int:
127 """int: Maximum grid dimension X."""
128 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2oAYl
130 @property
131 def max_grid_dim_y(self) -> int:
132 """int: Maximum grid dimension Y."""
133 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2a pA
135 @property
136 def max_grid_dim_z(self) -> int:
137 """int: Maximum grid dimension Z."""
138 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2fl
140 @property
141 def max_shared_memory_per_block(self) -> int:
142 """int: Maximum shared memory available per block in bytes."""
143 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2tAWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y+AlBmBnBoBpBqB,ArBsBtBuBvBwB-AxByBzBABBBCB
145 @property
146 def total_constant_memory(self) -> int:
147 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
148 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2#A
150 @property
151 def warp_size(self) -> int:
152 """int: Warp size in threads."""
153 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2'A
155 @property
156 def max_pitch(self) -> int:
157 """int: Maximum pitch in bytes allowed by memory copies."""
158 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2rA
160 @property
161 def maximum_texture1d_width(self) -> int:
162 """int: Maximum 1D texture width."""
163 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2HA
165 @property
166 def maximum_texture1d_linear_width(self) -> int:
167 """int: Maximum width for a 1D texture bound to linear memory."""
168 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2GA
170 @property
171 def maximum_texture1d_mipmapped_width(self) -> int:
172 """int: Maximum mipmapped 1D texture width."""
173 return self._get_cached_attribute( 2Jz
174 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2Jz
175 )
177 @property
178 def maximum_texture2d_width(self) -> int:
179 """int: Maximum 2D texture width."""
180 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2gl
182 @property
183 def maximum_texture2d_height(self) -> int:
184 """int: Maximum 2D texture height."""
185 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2KA
187 @property
188 def maximum_texture2d_linear_width(self) -> int:
189 """int: Maximum width for a 2D texture bound to linear memory."""
190 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2OA
192 @property
193 def maximum_texture2d_linear_height(self) -> int:
194 """int: Maximum height for a 2D texture bound to linear memory."""
195 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2MA
197 @property
198 def maximum_texture2d_linear_pitch(self) -> int:
199 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2NA
202 @property
203 def maximum_texture2d_mipmapped_width(self) -> int:
204 """int: Maximum mipmapped 2D texture width."""
205 return self._get_cached_attribute( 2Mz
206 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2Mz
207 )
209 @property
210 def maximum_texture2d_mipmapped_height(self) -> int:
211 """int: Maximum mipmapped 2D texture height."""
212 return self._get_cached_attribute( 2`k
213 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2`k
214 )
216 @property
217 def maximum_texture3d_width(self) -> int:
218 """int: Maximum 3D texture width."""
219 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2RA
221 @property
222 def maximum_texture3d_height(self) -> int:
223 """int: Maximum 3D texture height."""
224 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2QA
226 @property
227 def maximum_texture3d_depth(self) -> int:
228 """int: Maximum 3D texture depth."""
229 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2PA
231 @property
232 def maximum_texture3d_width_alternate(self) -> int:
233 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
234 return self._get_cached_attribute( 2Pz
235 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2Pz
236 )
238 @property
239 def maximum_texture3d_height_alternate(self) -> int:
240 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
241 return self._get_cached_attribute( 2Oz
242 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2Oz
243 )
245 @property
246 def maximum_texture3d_depth_alternate(self) -> int:
247 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
248 return self._get_cached_attribute( 2Nz
249 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2Nz
250 )
252 @property
253 def maximum_texturecubemap_width(self) -> int:
254 """int: Maximum cubemap texture width or height."""
255 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2SA
257 @property
258 def maximum_texture1d_layered_width(self) -> int:
259 """int: Maximum 1D layered texture width."""
260 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2FA
262 @property
263 def maximum_texture1d_layered_layers(self) -> int:
264 """int: Maximum layers in a 1D layered texture."""
265 return self._get_cached_attribute( 2Iz
266 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2Iz
267 )
269 @property
270 def maximum_texture2d_layered_width(self) -> int:
271 """int: Maximum 2D layered texture width."""
272 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2LA
274 @property
275 def maximum_texture2d_layered_height(self) -> int:
276 """int: Maximum 2D layered texture height."""
277 return self._get_cached_attribute( 2Kz
278 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2Kz
279 )
281 @property
282 def maximum_texture2d_layered_layers(self) -> int:
283 """int: Maximum layers in a 2D layered texture."""
284 return self._get_cached_attribute( 2Lz
285 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2Lz
286 )
288 @property
289 def maximum_texturecubemap_layered_width(self) -> int:
290 """int: Maximum cubemap layered texture width or height."""
291 return self._get_cached_attribute( 2Rz
292 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2Rz
293 )
295 @property
296 def maximum_texturecubemap_layered_layers(self) -> int:
297 """int: Maximum layers in a cubemap layered texture."""
298 return self._get_cached_attribute( 2Qz
299 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2Qz
300 )
302 @property
303 def maximum_surface1d_width(self) -> int:
304 """int: Maximum 1D surface width."""
305 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2xA
307 @property
308 def maximum_surface2d_width(self) -> int:
309 """int: Maximum 2D surface width."""
310 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2AA
312 @property
313 def maximum_surface2d_height(self) -> int:
314 """int: Maximum 2D surface height."""
315 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2yA
317 @property
318 def maximum_surface3d_width(self) -> int:
319 """int: Maximum 3D surface width."""
320 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2DA
322 @property
323 def maximum_surface3d_height(self) -> int:
324 """int: Maximum 3D surface height."""
325 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2CA
327 @property
328 def maximum_surface3d_depth(self) -> int:
329 """int: Maximum 3D surface depth."""
330 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2BA
332 @property
333 def maximum_surface1d_layered_width(self) -> int:
334 """int: Maximum 1D layered surface width."""
335 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2wA
337 @property
338 def maximum_surface1d_layered_layers(self) -> int:
339 """int: Maximum layers in a 1D layered surface."""
340 return self._get_cached_attribute( 2Dz
341 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2Dz
342 )
344 @property
345 def maximum_surface2d_layered_width(self) -> int:
346 """int: Maximum 2D layered surface width."""
347 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2zA
349 @property
350 def maximum_surface2d_layered_height(self) -> int:
351 """int: Maximum 2D layered surface height."""
352 return self._get_cached_attribute( 2Ez
353 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2Ez
354 )
356 @property
357 def maximum_surface2d_layered_layers(self) -> int:
358 """int: Maximum layers in a 2D layered surface."""
359 return self._get_cached_attribute( 2Fz
360 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2Fz
361 )
363 @property
364 def maximum_surfacecubemap_width(self) -> int:
365 """int: Maximum cubemap surface width."""
366 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2EA
368 @property
369 def maximum_surfacecubemap_layered_width(self) -> int:
370 """int: Maximum cubemap layered surface width."""
371 return self._get_cached_attribute( 2Hz
372 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2Hz
373 )
375 @property
376 def maximum_surfacecubemap_layered_layers(self) -> int:
377 """int: Maximum layers in a cubemap layered surface."""
378 return self._get_cached_attribute( 2Gz
379 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2Gz
380 )
382 @property
383 def max_registers_per_block(self) -> int:
384 """int: Maximum number of 32-bit registers available to a thread block."""
385 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2sA
387 @property
388 def clock_rate(self) -> int:
389 """int: Typical clock frequency in kilohertz."""
390 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 21foz6Bbb2mcb
392 @property
393 def texture_alignment(self) -> int:
394 """int: Alignment requirement for textures."""
395 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 29A
397 @property
398 def texture_pitch_alignment(self) -> int:
399 """int: Pitch alignment requirement for textures."""
400 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2!A
402 @property
403 def gpu_overlap(self) -> bool:
404 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead."""
405 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2~z
407 @property
408 def multiprocessor_count(self) -> int:
409 """int: Number of multiprocessors on device."""
410 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 20AYl
412 @property
413 def kernel_exec_timeout(self) -> bool:
414 """bool: Specifies whether there is a run time limit on kernels."""
415 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 28B
417 @property
418 def integrated(self) -> bool:
419 """bool: Device is integrated with host memory."""
420 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2eA
422 @property
423 def can_map_host_memory(self) -> bool:
424 """bool: Device can map host memory into CUDA address space."""
425 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2cl
427 @property
428 def compute_mode(self) -> int:
429 """int: Compute mode (See CUcomputemode for details)."""
430 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 27B
432 @property
433 def concurrent_kernels(self) -> bool:
434 """bool: Device can possibly execute multiple kernels concurrently."""
435 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2[z
437 @property
438 def ecc_enabled(self) -> bool:
439 """bool: Device has ECC support enabled."""
440 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2el
442 @property
443 def pci_bus_id(self) -> int:
444 """int: PCI bus ID of the device."""
445 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 24A
447 @property
448 def pci_device_id(self) -> int:
449 """int: PCI device ID of the device."""
450 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 25A
452 @property
453 def pci_domain_id(self) -> int:
454 """int: PCI domain ID of the device."""
455 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 26A
457 @property
458 def tcc_driver(self) -> bool:
459 """bool: Device is using TCC driver model."""
460 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 28A
462 @property
463 def memory_clock_rate(self) -> int:
464 """int: Peak memory clock frequency in kilohertz."""
465 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 29B
467 @property
468 def global_memory_bus_width(self) -> int:
469 """int: Global memory bus width in bits."""
470 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2{z
472 @property
473 def l2_cache_size(self) -> int:
474 """int: Size of L2 cache in bytes."""
475 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2gA
477 @property
478 def max_threads_per_multiprocessor(self) -> int:
479 """int: Maximum resident threads per multiprocessor."""
480 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2vAWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y
482 @property
483 def unified_addressing(self) -> bool:
484 """bool: Device shares a unified address space with the host."""
485 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a $A
487 @property
488 def compute_capability_major(self) -> int:
489 """int: Major compute capability version number."""
490 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmAm}l1foz2pcr?zbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nBfCfDfEf
492 @property
493 def compute_capability_minor(self) -> int:
494 """int: Minor compute capability version number."""
495 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmAm}l1foz2pcr@zbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nBfCfDfEf
497 @property
498 def global_l1_cache_supported(self) -> bool:
499 """bool: Device supports caching globals in L1."""
500 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2`z
502 @property
503 def local_l1_cache_supported(self) -> bool:
504 """bool: Device supports caching locals in L1."""
505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2hA
507 @property
508 def max_shared_memory_per_multiprocessor(self) -> int:
509 """int: Maximum shared memory available per multiprocessor in bytes."""
510 return self._get_cached_attribute( 2CzWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y
511 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2CzWzXzYzZz0z1z9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y
512 )
514 @property
515 def max_registers_per_multiprocessor(self) -> int:
516 """int: Maximum number of 32-bit registers available per multiprocessor."""
517 return self._get_cached_attribute( 2Az9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y
518 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2Az9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y
519 )
521 @property
522 def managed_memory(self) -> bool:
523 """bool: Device can allocate managed memory on this system."""
524 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagiA
526 @property
527 def multi_gpu_board(self) -> bool:
528 """bool: Device is on a multi-GPU board."""
529 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2YA
531 @property
532 def multi_gpu_board_group_id(self) -> int:
533 """int: Unique id for a group of devices on the same multi-GPU board."""
534 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2il
536 @property
537 def host_native_atomic_supported(self) -> bool:
538 """bool: Link between the device and the host supports all native atomic operations."""
539 return bool( 2xz
540 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2xz
541 )
543 @property
544 def single_to_double_precision_perf_ratio(self) -> int:
545 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
546 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2em
548 @property
549 def pageable_memory_access(self) -> bool:
550 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
551 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 23A
553 @property
554 def concurrent_managed_access(self) -> bool:
555 """bool: Device can coherently access managed memory concurrently with the CPU."""
556 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 22f3f4f5f6f7f*f+f,f-f.f/f:f;f=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagdlbgcgdgwrYfbn3mcndr3pdnenWlwnfn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yrn%m
558 @property
559 def compute_preemption_supported(self) -> bool:
560 """bool: Device supports compute preemption."""
561 return bool( 2rz
562 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2rz
563 )
565 @property
566 def can_use_host_pointer_for_registered_mem(self) -> bool:
567 """bool: Device can access host registered memory at the same virtual address as the CPU."""
568 return bool( 2ez
569 self._get_cached_attribute( 2ez
570 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2ez
571 )
572 )
574 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
576 @property
577 def cooperative_launch(self) -> bool:
578 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
579 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2]zYl
581 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
583 @property
584 def max_shared_memory_per_block_optin(self) -> int:
585 """int: Maximum optin shared memory per block."""
586 return self._get_cached_attribute( 2Bz
587 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2Bz
588 )
590 @property
591 def pageable_memory_access_uses_host_page_tables(self) -> bool:
592 """bool: Device accesses pageable memory via the host's page tables."""
593 return bool( 2lz
594 self._get_cached_attribute( 2lz
595 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2lz
596 )
597 )
599 @property
600 def direct_managed_mem_access_from_host(self) -> bool:
601 """bool: The host can directly access managed memory on the device without migration."""
602 return bool( 2-k
603 self._get_cached_attribute( 2-k
604 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2-k
605 )
606 )
608 @property
609 def virtual_memory_management_supported(self) -> bool:
610 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
611 return bool( 2/kze8e9e,BAe4p
612 self._get_cached_attribute( 2/kze8e9e,BAe4p
613 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2/kze8e9e,BAe4p
614 )
615 )
617 @property
618 def handle_type_posix_file_descriptor_supported(self) -> bool:
619 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
620 return bool( 2W l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbhzEbFb5bGbQ R U V
621 self._get_cached_attribute( 2W l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbhzEbFb5bGbQ R U V
622 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2W l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbhzEbFb5bGbQ R U V
623 )
624 )
626 @property
627 def handle_type_win32_handle_supported(self) -> bool:
628 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
629 return bool( 2uz
630 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2uz
631 )
633 @property
634 def handle_type_win32_kmt_handle_supported(self) -> bool:
635 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
636 return bool( 2iz
637 self._get_cached_attribute( 2iz
638 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2iz
639 )
640 )
642 @property
643 def max_blocks_per_multiprocessor(self) -> int:
644 """int: Maximum number of blocks per multiprocessor."""
645 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2nA
647 @property
648 def generic_compression_supported(self) -> bool:
649 """bool: Device supports compression of memory."""
650 return bool( 2_k
651 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2_k
652 )
654 @property
655 def max_persisting_l2_cache_size(self) -> int:
656 """int: Maximum L2 persisting lines capacity setting in bytes."""
657 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2qA
659 @property
660 def max_access_policy_window_size(self) -> int:
661 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
662 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2jA
664 @property
665 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
666 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
667 return bool( 2gz
668 self._get_cached_attribute( 2gz
669 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2gz
670 )
671 )
673 @property
674 def reserved_shared_memory_per_block(self) -> int:
675 """int: Shared memory reserved by CUDA driver per block in bytes."""
676 return self._get_cached_attribute( 2Sz
677 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2Sz
678 )
680 @property
681 def sparse_cuda_array_supported(self) -> bool:
682 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
683 return bool( 2Tz
684 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2Tz
685 )
687 @property
688 def read_only_host_register_supported(self) -> bool:
689 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTREGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not."""
690 return bool( 2{k
691 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2{k
692 )
694 @property
695 def memory_pools_supported(self) -> bool:
696 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
697 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2zrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:q;q=q?q@q[q]q^q'z(z)z*z+z,z#f2f7hLfMf8hre9h!h#h$h%h$f3f'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f{hPfQf|hte}h~haibici'f5fdiRfSfeiuefigihiiiji(f6fkiTfUfliveminioipiqi)f7friVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPi-z.z_qYpZpUlVl`q{q|qMnNnOn}qPnQnRnSn~qarTnbrQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%iW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbWAbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwn(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}y@irnYm%m[iZf0fEbFb5b]iGb^i_i`i{i|i}i~iajbjcjBe2g3gxhdjejfjCeyhzhgjhjHbIbJbKbLbijjjkjljmj{g|g}g~gahGfHfIfJfKfAhDe4g5gBhnjojpjEeChDhqjrj6g7g8g9g!gFe#g$gsjtjujEhFhvjwjxjyjzjAjBj8b9b!b#b$bHeIeJeCjDjEjFjGjKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%b'b(b)b*bRjSjTjUjVjbhchdhehfhHhIhJhKhLhOe*g+gMhWjXjYjPeNhOhZj0jSbTbUbVbWb1j2j3j4j5jghhhihjhkhqhrhshthuhPhQe,g-gQh6j7j8jReRhSh9j!j.g/g:g;g=gSe?g@g#j$j%jThUh'j(j)j*j+j,j-j/b:b;b=b?bUeVeWe.j/j:j;j=jXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b[b]b^b_b~jakbkckdklhmhnhohphQ R U V ekfkgkhkikWhXhYhZh0hjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkbz
699 @property
700 def gpu_direct_rdma_supported(self) -> bool:
701 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
702 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2|zAe4p
704 @property
705 def gpu_direct_rdma_flush_writes_options(self) -> int:
706 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
707 return self._get_cached_attribute( 2sz
708 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2sz
709 )
711 @property
712 def gpu_direct_rdma_writes_ordering(self) -> int:
713 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here."""
714 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2}z
716 @property
717 def mempool_supported_handle_types(self) -> int:
718 """int: Handle types supported with mempool based IPC."""
719 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2XA
721 @property
722 def deferred_mapping_cuda_array_supported(self) -> bool:
723 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
724 return bool( 2fz
725 self._get_cached_attribute( 2fz
726 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2fz
727 )
728 )
730 @property
731 def numa_config(self) -> int:
732 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
733 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 21A
735 @property
736 def numa_id(self) -> int:
737 """int: NUMA node ID of the GPU memory."""
738 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 22A
740 @property
741 def multicast_supported(self) -> bool:
742 """bool: Device supports switch multicast and reduction operations."""
743 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2ZA
745 @property
746 def surface_alignment(self) -> int:
747 """int: Surface alignment requirement in bytes."""
748 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 27A
750 @property
751 def async_engine_count(self) -> int:
752 """int: Number of asynchronous engines."""
753 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2/z
755 @property
756 def can_tex2d_gather(self) -> bool:
757 """bool: True if device supports 2D texture gather operations, False if not."""
758 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2;z
760 @property
761 def maximum_texture2d_gather_width(self) -> int:
762 """int: Maximum 2D texture gather width."""
763 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2JA
765 @property
766 def maximum_texture2d_gather_height(self) -> int:
767 """int: Maximum 2D texture gather height."""
768 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2IA
770 @property
771 def stream_priorities_supported(self) -> bool:
772 """bool: True if device supports stream priorities, False if not."""
773 return bool( 2Uz
774 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2Uz
775 )
777 @property
778 def can_flush_remote_writes(self) -> bool:
779 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details."""
780 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2:z
782 @property
783 def host_register_supported(self) -> bool:
784 """bool: Device supports host memory registration via cudaHostRegister."""
785 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2dA
787 @property
788 def timeline_semaphore_interop_supported(self) -> bool:
789 """bool: External timeline semaphore interop is supported on the device."""
790 return bool( 2mz
791 self._get_cached_attribute( 2mz
792 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2mz
793 )
794 )
796 @property
797 def cluster_launch(self) -> bool:
798 """bool: Indicates device supports cluster launch."""
799 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2=z
801 @property
802 def can_use_64_bit_stream_mem_ops(self) -> bool:
803 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
804 return bool( 2pz
805 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2pz
806 )
808 @property
809 def can_use_stream_wait_value_nor(self) -> bool:
810 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
811 return bool( 2qz
812 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2qz
813 )
815 @property
816 def dma_buf_supported(self) -> bool:
817 """bool: Device supports buffer sharing with dma_buf mechanism."""
818 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2_z
820 # Start of CUDA 12 device attributes
822 @property
823 def ipc_event_supported(self) -> bool:
824 """bool: Device supports IPC Events."""
825 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2fA
827 @property
828 def mem_sync_domain_count(self) -> int:
829 """int: Number of memory domains the device supports."""
830 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2VA
832 @property
833 def tensor_map_access_supported(self) -> bool:
834 """bool: Device supports accessing memory using Tensor Map."""
835 return bool( 2Vzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g
836 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2Vzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g
837 )
839 @property
840 def handle_type_fabric_supported(self) -> bool:
841 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
842 return bool( 2tz
843 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2tz
844 )
846 @property
847 def unified_function_pointers(self) -> bool:
848 """bool: Device supports unified function pointers."""
849 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2jl
851 @property
852 def mps_enabled(self) -> bool:
853 """bool: Indicates if contexts created on this device will be shared via MPS."""
854 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2hl
856 @property
857 def host_numa_id(self) -> int:
858 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
859 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2l m n o p q r s t u v w x y z A B C D E F G H I J K L M N cA3p.iwh/i:i;i=ikl?ik ~lgm
861 @property
862 def d3d12_cig_supported(self) -> bool:
863 """bool: Device supports CIG with D3D12."""
864 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2^z
866 @property
867 def mem_decompress_algorithm_mask(self) -> int:
868 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
869 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2TA
871 @property
872 def mem_decompress_maximum_length(self) -> int:
873 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed."""
874 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2UA
876 @property
877 def vulkan_cig_supported(self) -> bool:
878 """bool: Device supports CIG with Vulkan."""
879 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2%A
881 @property
882 def gpu_pci_device_id(self) -> int:
883 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
885 Returns 0 if the driver does not support this query.
886 """
887 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2aA
889 @property
890 def gpu_pci_subsystem_id(self) -> int:
891 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
893 Returns 0 if the driver does not support this query.
894 """
895 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2bA
897 @property
898 def host_numa_virtual_memory_management_supported(self) -> bool:
899 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
900 return bool( 2.k
901 self._get_cached_attribute( 2.k
902 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2.k
903 )
904 )
906 @property
907 def host_numa_memory_pools_supported(self) -> bool:
908 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
909 return bool( 2yz
910 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2yz
911 )
913 # Start of CUDA 13 device attributes
915 @property
916 def host_numa_multinode_ipc_supported(self) -> bool:
917 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
918 return bool( 2zz
919 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2zz
920 )
922 @property
923 def host_memory_pools_supported(self) -> bool:
924 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
925 return bool( 2l m n o p q r s t u v w x y z A B C D E F G H I J K L M N wzfmln.i#mwhmn/inn:ion;ipn=i$mklqn?isn'm0f(mXlk 7e~y~lgmaz
926 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2l m n o p q r s t u v w x y z A B C D E F G H I J K L M N wzfmln.i#mwhmn/inn:ion;ipn=i$mklqn?isn'm0f(mXlk 7e~y~lgmaz
927 )
929 @property
930 def host_virtual_memory_management_supported(self) -> bool:
931 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
932 return bool( 2jz
933 self._get_cached_attribute( 2jz
934 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2jz
935 )
936 )
938 @property
939 def host_alloc_dma_buf_supported(self) -> bool:
940 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
941 return bool( 2vz
942 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2vz
943 )
945 @property
946 def only_partial_host_native_atomic_supported(self) -> bool:
947 """bool: Link between the device and the host supports only some native atomic operations."""
948 return bool( 2kz
949 self._get_cached_attribute( 2kz
950 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2kz
951 )
952 )
955class Device:
956 """Represent a GPU and act as an entry point for cuda.core features.
958 This is a singleton object that helps ensure interoperability
959 across multiple libraries imported in the process to both see
960 and use the same GPU device.
962 While acting as the entry point, many other CUDA resources can be
963 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
964 resource created through this device, will continue to refer to
965 this device's context.
967 Newly returned :obj:`~_device.Device` objects are thread-local singletons
968 for a specified device.
970 Note
971 ----
972 Will not initialize the GPU.
974 Parameters
975 ----------
976 device_id : int, optional
977 Device ordinal to return a :obj:`~_device.Device` object for.
978 Default value of `None` return the currently used device.
980 """
981 __slots__ = (
982 "_device_id",
983 "_memory_resource",
984 "_has_inited",
985 "_properties",
986 "_resources",
987 "_uuid",
988 "_context",
989 "__weakref__",
990 )
992 def __new__(cls, device_id: Device | int | None = None) -> Device:
993 if isinstance(device_id, Device): 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tUGQiVGRiWGSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 xGp 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE0G[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbOGFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
994 return device_id 2UlVl`q{q|qMnNnOn}qPnQnRnSn~qarTnbrUGVGWGhm)mimjmkm*mlmmmW #BX $BY Z %n0 xG1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . )A*A/ : ; xryr^C_C`C{CXffGQlgGhGvn(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-i@iYm0GZf8e9e,BAekFbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqD?COG@C[CQ R
996 Device_ensure_cuda_initialized() 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
997 device_id = Device_resolve_device_id(device_id) 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
998 devices = Device_ensure_tls_devices(cls) 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1000 try: 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1001 return devices[device_id] 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1002 except IndexError: 2cGdG
1003 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2cGdG
1005 def _check_context_initialized(self) -> None:
1006 if not self._has_inited: 2IDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qLfMfNfOfPfQfRfSfTfUfVfWf_qEFFFhFYpSDTDUDZpVDUlVldm]m^mMnNnOnPnQnRnSnTnGF_m`m{m|m}m~mUGVGWG2G3G4Ghm)mimjmkm*mlmmmCmDmEmXGYGZGbFcFdF|lwmanxmymzmTBAm}l7G8GKHLH9GMHNHHFIF!G#GOHPHQHRHSH!BUHVHWHXHYHZH0H1H2H3H4H5H1f6Hoz7HAGBGCGDGEGFGGGHG6G8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgI,mhItGiI{tjIaFkI)A*ADBlIzGmInIoIpIqIxryr^C_C`C{CJFKFLFMFNFOFFmGmiFPFZmbbamjFHm8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVm`B{B|B}B~BaCbC#pcCdCeCfCgC'B(n0mcbEBFBYl;BGBnmll[yrIsI$GtI%GuIvI'G(GwIxIyI)GzI*G+G,G-G.G/G:G;G=GAI?G@G[G]GBI^G_GCIDIEIFI`GGI{GHIII|G}GJIKILI~GMIaHbHcHdHeHfHgHhHiHNIjHkHlHmHOInHoHPIQIRISIpHTIqHUIVIrHsHWIXIYItHZIuHvHwHxHyHzHAHBHCH0IDHEHFHGH1IHHIH2I3IQlWlvnwnfm0G1mXlk 7eOEQE`g:k;kPGmllqGoHoIonqnloqolpqJoKoLoqq2g3gHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNbMoNo{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzq1g0lRlSlTl1l4g5g6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9o#g$g!o#o@ [ QbRb$o%o%g'g(g)g] ^ 'o(obh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqylJq)o*o+oKq*g+gSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb,o-ogh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqalwoFnGnHnxo,g-g.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfp?g@ggphp{ | 3b4bipjp[g]g^g_g} ~ kplplhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2qQ R U V Il3qmpnpop4qJl5qppqprp6qKl7qsptpup8qLl9qvpwpxp!qMl#qypzpAp$qNl%qBpCpDp'qOl(qEpFpGp)qPl*qHpIpJp+q3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+F,FgF-F.FtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9E!E#EsFtFuF$EvFyDzD5zADBDCD6zDD7zEDFDGDHDwFSB5G
1007 raise CUDAError(
1008 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
1009 )
1012 @classmethod
1013 def get_all_devices(cls) -> tuple[Device, ...]:
1014 """
1015 Query the available device instances.
1017 Returns
1018 -------
1019 tuple of Device
1020 A tuple containing instances of available devices.
1021 """
1022 from cuda.core import system 26pFf8p9p!p'n:B|p}p~paqbqcqdqeqfqgqhqiqjqkqbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDbz
1023 total = system.get_num_devices() 26pFf8p9p!p'n:B|p}p~paqbqcqdqeqfqgqhqiqjqkqbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDbz
1024 return tuple(cls(device_id) for device_id in range(total)) 26pFf8p9p!p'n:B|p}p~paqbqcqdqeqfqgqhqiqjqkqbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDbz
1026 def to_system_device(self) -> 'cuda.core.system.Device':
1027 """
1028 Get the corresponding :class:`cuda.core.system.Device` (which is used
1029 for NVIDIA Management Library (NVML) access) for this
1030 :class:`cuda.core.Device` (which is used for CUDA access).
1032 The devices are mapped to one another by their UUID.
1034 Returns
1035 -------
1036 cuda.core.system.Device
1037 The corresponding system-level device instance used for NVML access.
1038 """
1039 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 22z
1041 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 22z
1042 raise RuntimeError(
1043 "cuda.core.system.Device requires cuda-bindings 12.9.6+ for CUDA 12.x, or cuda-bindings 13.2.0+ for CUDA 13.x"
1044 )
1046 from cuda.core.system import Device as SystemDevice 22z
1047 return SystemDevice(uuid=self.uuid) 22z
1049 @property
1050 def device_id(self) -> int:
1051 """Return device ordinal."""
1052 return self._device_id 2zrAr#f2f$f3f%f4f'f5f(f6f)f7fUlVlzoAodm`q{q|qMnNnOn}qPnQnRnSn~qarTnbrUGVGWG2G3G4Ghm)mimjmkm*mlmmmCmDmEmXGYGZGbFcFdF:F6I7G8G;FvG@y-BkC7IKHLH9GMHNHwG!G#G7pW QG#BX $BCoY IG.BZ JG%n0 xG1 1f2 Zl3 4 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) Do* KGLG+ MGEo, NG,m- tG{t. )A*ADB/ /B: Fo; xryr^C_C`C{CcrFmGm:BUB7DVB'B(n0myGll[yBmXffGQlgGhG_FYfdrvnwn(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-i@iYm0GZfOEQEze8e9e,BAekFtnun`F{F`g:k;k9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?ybDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqD?COG@C5b[CmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblnrorQ R IlJlKlLlMlNlOlPlhC6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zTH8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_IVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k*k+k,kiC`I5G
1054 @property
1055 def pci_bus_id(self) -> str:
1056 """Return a PCI Bus Id string for this device."""
1057 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2'n7D2z
1058 return bus_id[:12].decode() 2'n7D2z
1060 def can_access_peer(self, peer: Device | int) -> bool:
1061 """Check if this device can access memory from the specified peer device.
1063 Queries whether peer-to-peer memory access is supported between this
1064 device and the specified peer device.
1066 Parameters
1067 ----------
1068 peer : Device | int
1069 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID.
1070 """
1071 peer = Device(peer)
1072 cdef int d1 = <int> self.device_id
1073 cdef int d2 = <int> peer.device_id
1074 if d1 == d2:
1075 return True
1076 cdef int value = 0
1077 with nogil:
1078 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1079 return bool(value)
1081 @property
1082 def uuid(self) -> str:
1083 """Return a UUID for the device.
1085 Returns 16-octets identifying the device. If the device is in
1086 MIG mode, returns its MIG UUID which uniquely identifies the
1087 subscribed MIG compute instance.
1089 Note
1090 ----
1091 MIG UUID is only returned when device is in MIG mode and the
1092 driver is older than CUDA 11.4.
1094 The UUID is cached after first access to avoid repeated CUDA API calls.
1096 """
1097 cdef cydriver.CUuuid uuid
1098 cdef cydriver.CUdevice dev
1099 cdef bytes uuid_b
1100 cdef str uuid_hex
1102 if self._uuid is None: 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm
1103 dev = self._device_id 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm
1104 with nogil: 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm
1105 IF CUDA_CORE_BUILD_MAJOR == 12:
1106 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1107 ELSE: # 13.0+
1108 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm
1109 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm
1110 uuid_hex = uuid_b.hex() 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm
1111 # 8-4-4-4-12
1112 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm
1113 return self._uuid 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb'n|C_B}C~C2zVB(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm
1115 @property
1116 def name(self) -> str:
1117 """Return the device name."""
1118 # Use 256 characters to be consistent with CUDA Runtime
1119 cdef int LENGTH = 256 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm
1120 cdef bytes name = bytes(LENGTH) 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm
1121 cdef char* name_ptr = name 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm
1122 cdef cydriver.CUdevice this_dev = self._device_id 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm
1123 with nogil: 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm
1124 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm
1125 name = name.split(b"\0")[0] 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm
1126 return name.decode() 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.AUBSm
1128 @property
1129 def properties(self) -> DeviceProperties:
1130 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1131 if self._properties is None: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmTBAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcrBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9e,BAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
1132 self._properties = DeviceProperties._init(self._device_id) 2a ompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i|lwmanxmymzmAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbBocldl-kel_k.kfl`kglhlil{kemjl/kbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQl'iYfbn3mcndnenWlfm(iWmvh4m)i5m*i6m+i7m,iXm8m-ifn]y9m^ygn_yhn`yinjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9eAeVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nbzrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
1134 return self._properties 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrAr8z9z!z#z$z1h2h3h4h5h6h%z,q-q.q/q:mprqr;m=m?m@m[m:q;q=q?q@q[q]q^qrr'z(z)z*z+z,zKpLp#f2f1e7hLfMf8hre9h!h#h$h%h$f3f2e'hNfOf(hse)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|hte}h~haibici'f5f4ediRfSfeiuefigihiiiji(f6f5ekiTfUfliveminioipiqi)f7f6eriVfWfsiwetiuiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPisr-z.zMptr_qurNpOpPpQpRpSpTpUpVpWpXpYpZpUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pbr_m`m{m|m}m~mQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9i!i#i$i%i|lwmanxmymzmTBAm}l*f+f,f-f.f/f:f;fUn=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fagW l X m Y n Z o 0 p 1 q 1f2 ozr mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb2pcrBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'Abb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgBmXf1pQlcz'iwrYfbn3mcndr3pdnenWlvnwnfm(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm[iZf0f(mXlk 7e~y~lgmazze8e9e,BAe4pVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;kWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^i!e_i`iCd#e{i|iDdEd}i$e~iajFd%ebjcjGdBe2g3gxhdjejfjCeyhzhgjhjHbg IbJbc h KbLbd MbNb'e(e)e*e+eij,ejjkj-eljmj{g6b|g}gdb7b~gahebGfS HfIfO T JfKfP AhDe4g5gBhnjojpjEeChDhqjrj6gOb7g8g= Pb9g!g? Fe#g$gsjtjujEhFhvjwjxj.eyjzj/eAjBj8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[eDjEjRd]eFjGjSdKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSjTj_eUjVjbh+bchdhfb,behfhgbHhMeIhJh4dNeKhLh5dOe*g+gMhWjXjYjPeNhOhZj0jSbi TbUbe j VbWbf XbYb`e{e|e}e~e1jaf2j3jbf4j5jgh-bhhihhb.bjhkhibqh6drhshZb7dthuh0bPhQe,g-gQh6j7j8jReRhSh9j!j.g1b/g:g_ 2b;g=g` Se?g@g#j$j%jThUh'j(j)jcf*j+jdf,j-j/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf/j:j+dkf;j=j,dXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakbkmfckdklh`bmhnhjb{bohphkbQ R U V _d`deknffkgk{dofhkik|d}d~daeWhZeXhYhbe0eZh0hcejkpfkklkdeqfmknkeeokrfpkqkfesfrkskgetktfukvkheufwkxkieykvfzkAkjewfBkCkkeDkxfEkFkleyfGkHkmeneIkzfJkKkoeAfLkMkpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nbzrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0g
1136 @property
1137 def resources(self) -> DeviceResources:
1138 """Return the hardware resource query namespace for this device."""
1139 if self._resources is None: 2$pNkOkb xeyePkQkRkSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p
1140 self._resources = DeviceResources._init(self._device_id) 2$pNkOkb xeyePkQkRkSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p
1141 return self._resources 2$pNkOkb xeyePkQkRkSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p
1143 @property
1144 def compute_capability(self) -> ComputeCapability:
1145 """Return a named tuple with 2 fields: major and minor."""
1146 cdef DeviceProperties prop = self.properties 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmTBAm}l1foz2pcrbb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;cSE=cTE?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nBfCfDfEf
1147 cached = prop._cache.get("compute_capability") 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmTBAm}l1foz2pcrbb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;cSE=cTE?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nBfCfDfEf
1148 if cached is not None: 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmTBAm}l1foz2pcrbb2mVmb xeye]B^BcbYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;cSE=cTE?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$nBfCfDfEf
1149 return cached 2a hm)mimjmkm*mlmmmCmDmEmTB2pVmb xeyeYl'D*D;B/A:A;A=A?A@A[Anz]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;cSE=cTE?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdUEldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdc d dbebO P = ? 8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeRdSd%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dfbgbMe4dNe5de f hbibZb0b_ ` /b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe+d,d@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^djbkb_d`d{d|d}d~daeZebe0ecedeeefegeheiejekelemeneoepeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n
1150 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmAm}l1foz2pcrbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nBfCfDfEf
1151 return prop._cache.setdefault("compute_capability", cc) 2a vrompm2l3l4lqm5lrm-msm6l.m7l/mtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l:mprqr;m=m?m@m[mrrKpLp1ere2ese3ete4eue5eve6ewesrMptrurNpOpPpQpRpSpTpUpVpWpXpUlVlzoAodm]m^m0p_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm|lwmanxmymzmAm}l1foz2pcrbb2mVmb xeye]B^Bcb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTcUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqe6nfg7n8n9ngghgigjgkglgmgngog!npgqg#nlb$nBfCfDfEf
1153 @property
1154 def arch(self) -> str:
1155 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1156 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a hm)mimjmkm*mlmmmCmDmEm2pVmb xeye;BaDbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcVnIcJctnKcunLcMcNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0c:k;k1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdc d dbebO P = ? 8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdRdSd%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dfbgb4d5de f hbibZb0b_ ` /b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*d+d,d@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^djbkb_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n
1158 @property
1159 def context(self) -> Context:
1160 """Return the :obj:`~_context.Context` associated with this device.
1162 Note
1163 ----
1164 Device must be initialized.
1166 """
1167 self._check_context_initialized() 2lqpq{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzq0lznvoJqgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqwoInyo3q5q7q9q#q%q(q*q
1168 return self._context 2lqpq{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzq0lznvoJqgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqwoInyo3q5q7q9q#q%q(q*q
1170 @property
1171 def memory_resource(self) -> MemoryResource:
1172 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1173 cdef int attr, device_id
1174 if self._memory_resource is None: 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zTHVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kiC4I5G
1175 # If the device is in TCC mode, or does not support memory pools for some other reason,
1176 # use the SynchronousMemoryResource which does not use memory pools.
1177 device_id = self._device_id 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC
1178 with nogil: 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC
1179 HANDLE_RETURN( 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC
1180 cydriver.cuDeviceGetAttribute( 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC
1181 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1182 )
1183 )
1184 if attr == 1: 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC
1185 from cuda.core._memory import DeviceMemoryResource 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC
1186 self._memory_resource = DeviceMemoryResource(self._device_id) 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kiC
1187 else:
1188 from cuda.core._memory._legacy import _SynchronousMemoryResource
1189 self._memory_resource = _SynchronousMemoryResource(self._device_id)
1191 return self._memory_resource 2FmGm'B(n0mll[y`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl6xdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zTHVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kiC4I5G
1193 @memory_resource.setter
1194 def memory_resource(self, mr: MemoryResource) -> None:
1195 from cuda.core._memory import MemoryResource
1196 assert_type(mr, MemoryResource)
1197 self._memory_resource = mr
1199 @property
1200 def default_stream(self) -> Stream:
1201 """Return default CUDA :obj:`~_stream.Stream` associated with this device.
1203 The type of default stream returned depends on if the environment
1204 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1206 If set, returns a per-thread default stream. Otherwise returns
1207 the legacy stream.
1209 """
1210 return default_stream() 2UlVl`q{q|qMnNnOn}qPnQnRnSn~qarTnbr7G8G{I8f9G9f!f!G#GOHPHQHRHSH#B$BCoIG.BJG%nxG|I}IZl/F~I=FaJ?FbJ@FcJ[FdJ]FeJ^FfJgJhJiJjJkJlJmJnJoJpJqJDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTGxryr^C_C`C{CFmGm/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBll[yBmXfQlYf3mWlvnwnfmWmvhXm+m9m!m#mwh$mklYm%m'm0GZf0f(mXlk 7e`g:k;kmlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblQ R IlJlKlLlMlNlOlPl|FdzHBIBJBKBLBMBNBOBPBQBRB5z6z7zTHVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kiC4I5G
1212 def __int__(self) -> int:
1213 """Return device_id."""
1214 return self._device_id 2XGYGZG:FFmGm
1216 def __repr__(self) -> str:
1217 return f"<Device {self._device_id} ({self.name})>" 2@y7pQG#B$BCoIG.BJG%nxG1fozAGBGCGDGEGFGGGHGZl/FDoKGLGMGEoNG,mtG{taF)A*ADBzG/BSGFoTG.ASm
1219 def __hash__(self) -> int:
1220 return hash(self.uuid) 2@y-BkCW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDb|C_B}C~C(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFb5bGbImGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmQ R U V TmUmbmcm
1222 def __eq__(self, other: object) -> bool:
1223 if not isinstance(other, Device): 2@y-BW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbaG_BbGeG(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFbGbmqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrQ R U V bmcmgF
1224 return NotImplemented 2@y-BeGmqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrgF
1225 return self._device_id == other._device_id 2@yW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwb3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J . K xbab/ L : M ; N ybzbAbBbCbDbaG_BbG(ivh)i*i+i,i+m-i.iwh/i:i;i=ikl?i@ik ~lgmEbFbGbmqQ R U V bmcm
1227 def __reduce__(self) -> tuple[object, ...]:
1228 return Device, (self.device_id,) 27pQG#B$BCoIG.BJG%nxG1fZl=F?F@F[F]F^FDoKGLGMGEoNG,mtG{t)A*ADB/BFoxryr^C_C`C{Cnror
1230 def set_current(self, ctx: Context | None = None) -> Context | None:
1231 """Set device to be used for GPU executions.
1233 Initializes CUDA and sets the calling thread to a valid CUDA
1234 context. By default the primary context is used, but optional `ctx`
1235 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1237 Providing a `ctx` causes the previous set context to be popped and returned.
1239 Parameters
1240 ----------
1241 ctx : :obj:`~_context.Context`, optional
1242 Optional context to push onto this device's current thread stack.
1244 Returns
1245 -------
1246 :obj:`~_context.Context`, optional
1247 Popped context.
1249 Examples
1250 --------
1251 Acts as an entry point of this object. Users always start a code by
1252 calling this method, e.g.
1254 >>> from cuda.core import Device
1255 >>> dev0 = Device(0)
1256 >>> dev0.set_current()
1257 >>> # ... do work on device 0 ...
1259 """
1260 cdef ContextHandle h_context
1261 cdef cydriver.CUcontext prev_ctx, curr_ctx
1262 cdef Context prev_owned = None 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeye}FPkQkRkruSk~FTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1264 if ctx is not None: 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeye}FPkQkRkruSk~FTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1265 # TODO: revisit once Context is cythonized
1266 assert_type(ctx, Context) 2}F~F
1267 if ctx._device_id != self._device_id: 2}F~F
1268 raise RuntimeError(
1269 "the provided context was created on the device with"
1270 f" id={ctx._device_id}, which is different from the target id={self._device_id}"
1271 )
1272 if self._has_inited and self._context is not None: 2}F~F
1273 prev_owned = self._context 2}F~F
1274 # prev_ctx is the previous context
1275 curr_ctx = as_cu(ctx._h_context) 2}F~F
1276 prev_ctx = NULL 2}F~F
1277 with nogil: 2}F~F
1278 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2}F~F
1279 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2}F~F
1280 self._has_inited = True 2}F~F
1281 self._context = ctx # Store owning context reference 2}F~F
1282 if prev_ctx != NULL: 2}F~F
1283 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2}F~F
1284 return prev_owned 2}F~F
1285 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id)
1286 else:
1287 # use primary ctx
1288 h_context = get_primary_context(self._device_id) 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1289 if h_context.get() == NULL: 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1290 raise ValueError("Cannot set NULL context as current")
1291 with nogil: 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1292 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1293 self._has_inited = True 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1294 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rPD;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctRDdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@tWD[t]t*f+f^t,f-f.f/f:f;fUn_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag!B`tW l X m Y n Z o 0 p 1 q 2 r mbnbobpbqbrbsbtbubvbwbZl3 /Fs 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F * G + H , I - J 8p9p!p{t. aFK xbab/ L : M ; N ybzbAbBbCbDb|t}t~taubucuduFmGmXDYDZD0Deu1D2D:B3D4D.A%B5D6DZmbbamfuHmgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucbEBFBYl(D)D+D,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXf1pQlxu|pcz'i:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{D(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhEiE9mGuHugnjEIuhnkEJuinKulEjnmEnE!moEpEknqELulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7eKELEMENEPERuze8e9eREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqd4zrdsdtdudvdwdxdydzdAdBd?CEbOGFb@C5bPG]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6Elbpxqxrx]CsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxhCMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1296 def create_context(self, options: ContextOptions | None = None) -> Context:
1297 """Create a new :obj:`~_context.Context` object.
1299 Note
1300 ----
1301 The newly created context will not be set as current.
1303 Parameters
1304 ----------
1305 options : :obj:`~_context.ContextOptions`, optional
1306 Customizable dataclass for context creation options.
1308 Returns
1309 -------
1310 :obj:`~_context.Context`
1311 Newly created context object.
1313 """
1314 cdef int i
1315 cdef object resources
1316 cdef object res
1317 cdef SMResource sm_res
1318 cdef WorkqueueResource wq_res
1319 cdef GreenCtxHandle h_green
1321 if options is None: 2uGNkOkb (n0mPkQkRkSkTkUkRGJH
1322 raise ValueError( 2JH
1323 "options with device resources must be provided to create a green context"
1324 )
1326 options = check_or_create_options(ContextOptions, options, "Context options") 2uGNkOkb (n0mPkQkRkSkTkUkRGJH
1327 if options.resources is None: 2uGNkOkb (n0mPkQkRkSkTkUkRGJH
1328 raise ValueError( 2JH
1329 "ContextOptions.resources must be provided to create a green context"
1330 )
1332 resources = tuple(options.resources) 2uGNkOkb (n0mPkQkRkSkTkUkRG
1333 if len(resources) == 0: 2uGNkOkb (n0mPkQkRkSkTkUkRG
1334 raise ValueError("ContextOptions.resources must not be empty")
1336 cdef vector[cydriver.CUdevResource] c_resources
1337 c_resources.resize(len(resources)) 2uGNkOkb (n0mPkQkRkSkTkUkRG
1339 for i, res in enumerate(resources): 2uGNkOkb (n0mPkQkRkSkTkUkRG
1340 if isinstance(res, SMResource): 2uGNkOkb (n0mPkQkRkSkTkUkRG
1341 sm_res = <SMResource>res 2uGNkOkb (n0mPkQkRkSkTkUkRG
1342 if not sm_res._is_usable: 2uGNkOkb (n0mPkQkRkSkTkUkRG
1343 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2RG
1344 c_resources[i] = sm_res._resource 2uGNkOkb (n0mPkQkRkSkTkUk
1345 elif isinstance(res, WorkqueueResource): 20m
1346 wq_res = <WorkqueueResource>res 20m
1347 c_resources[i] = wq_res._wq_config_resource 20m
1348 else:
1349 raise TypeError(f"Unsupported context resource type: {type(res)}")
1351 h_green = create_green_ctx_handle( 2uGNkOkb (n0mPkQkRkSkTkUk
1352 c_resources.data(),
1353 <unsigned int>(c_resources.size()),
1354 <cydriver.CUdevice>(self._device_id), 2uGNkOkb (n0mPkQkRkSkTkUk
1355 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM),
1356 )
1357 if h_green.get() == NULL: 2uGNkOkb (n0mPkQkRkSkTkUk
1358 HANDLE_RETURN(get_last_error())
1359 raise RuntimeError("Failed to create CUDA green context")
1361 return Context._from_green_ctx(Context, h_green, self._device_id) 2uGNkOkb (n0mPkQkRkSkTkUk
1363 def create_stream(self, obj: IsStreamType | None = None, options: object = None) -> Stream:
1364 """Create a :obj:`~_stream.Stream` object.
1366 New stream objects can be created in two different ways:
1368 1) Create a new CUDA stream with customizable ``options``.
1369 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1371 Option (2) internally holds a reference to the foreign object
1372 such that the lifetime is managed.
1374 Note
1375 ----
1376 Device must be initialized.
1378 Parameters
1379 ----------
1380 obj : :obj:`~_stream.IsStreamType`, optional
1381 Any object supporting the ``__cuda_stream__`` protocol.
1382 options : :obj:`~_stream.StreamOptions`, optional
1383 Customizable dataclass for stream creation options.
1385 Returns
1386 -------
1387 :obj:`~_stream.Stream`
1388 Newly created stream object.
1390 """
1391 self._check_context_initialized() 2IDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^q_qEFFFTDUDUlVldm]m^mMnNnOnPnQnRnSnTnGF_m`m{m|m}m~mUGVGWG2G3G4Ghm)mimjmkm*mlmmmCmDmEmXGYGZGbFcFdF|lwmanxmymzmTBAm}l7G8GKHLH9GMHNHHFIF!G#GOHPHQHRHSH!B1fozAGBGCGDGEGFGGGHG6G8H9H,mtG{taF)A*ADBzGxryr^C_C`C{CJFKFLFMFNFOFPFZmbbamQFRFSFTFUFVF2mWFXFYFZF0F1F2FVm`B{B|B}B~BaCbC#pcCdCeCfCgCcbEBFBYl;BGBnmrIsI$GtI%GuIvI'G(GwIxIyI)GzI*G+G,G-G.G/G:G;G=GAI?G@G[G]GBI^G_GCIDIEIFI`GGI{GHIII|G}GJIKILI~GMIaHbHcHdHeHfHgHhHiHNIjHkHlHmHOInHoHPIQIRISIpHTIqHUIVIrHsHWIXIYItHZIuHvHwHxHyHzHAHBHCH0IDHEHFHGH1IHHIH2I3IQlWl1mXlOEQE`g:k;kPGnqoqqq1lbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqKqxolhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2qU V 4q6q8q!q$q'q)q+q3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+F,FgF-F.F6xdz8E9E!E$E5G
1392 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2IDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^q_qEFFFTDUDUlVldm]m^mMnNnOnPnQnRnSnTnGF_m`m{m|m}m~mUGVGWG2G3G4Ghm)mimjmkm*mlmmmCmDmEmXGYGZGbFcFdF|lwmanxmymzmTBAm}l7G8GKHLH9GMHNHHFIF!G#GOHPHQHRHSH!B1fozAGBGCGDGEGFGGGHG6G8H9H,mtG{taF)A*ADBzGxryr^C_C`C{CJFKFLFMFNFOFPFZmbbamQFRFSFTFUFVF2mWFXFYFZF0F1F2FVm`B{B|B}B~BaCbC#pcCdCeCfCgCcbEBFBYl;BGBnmrIsI$GtI%GuIvI'G(GwIxIyI)GzI*G+G,G-G.G/G:G;G=GAI?G@G[G]GBI^G_GCIDIEIFI`GGI{GHIII|G}GJIKILI~GMIaHbHcHdHeHfHgHhHiHNIjHkHlHmHOInHoHPIQIRISIpHTIqHUIVIrHsHWIXIYItHZIuHvHwHxHyHzHAHBHCH0IDHEHFHGH1IHHIH2I3IQlWl1mXlOEQE`g:k;kPGnqoqqq1lbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqKqxolhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2qU V 4q6q8q!q$q'q)q+q3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+F,FgF-F.F6xdz8E9E!E$E5G
1394 def create_event(self, options: EventOptions | None = None) -> Event:
1395 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`.
1397 Note
1398 ----
1399 Device must be initialized.
1401 Parameters
1402 ----------
1403 options : :obj:`EventOptions`, optional
1404 Customizable dataclass for event creation options.
1406 Returns
1407 -------
1408 :obj:`~_event.Event`
1409 Newly created event object.
1411 """
1412 self._check_context_initialized() 2QDLfMfNfOfPfQfRfSfTfUfVfWfhFYpSDTDUDZpVDdm6GiFamjFHm8DGoHoIoJoKoLo2g3g=k?kMbNbMoNoxnynRlSlTl4g5g6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9o#g$g!o#o@ [ QbRb$o%o%g'g(g)g] ^ 'o(oAnBnCn)o*o+o*g+g[k]kXbYb,o-oDnEnFnGnHn,g-g.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfp?g@ggphp{ | 3b4bipjp[g]g^g_g} ~ kplpJnKnLnmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJp
1413 cdef Context ctx = self._context 2QDLfMfNfOfPfQfRfSfTfUfVfWfhFYpSDTDUDZpVDdm6GiFamjFHm8DGoHoIoJoKoLo2g3g=k?kMbNbMoNoxnynRlSlTl4g5g6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9o#g$g!o#o@ [ QbRb$o%o%g'g(g)g] ^ 'o(oAnBnCn)o*o+o*g+g[k]kXbYb,o-oDnEnFnGnHn,g-g.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfp?g@ggphp{ | 3b4bipjp[g]g^g_g} ~ kplpJnKnLnmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJp
1414 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2QDLfMfNfOfPfQfRfSfTfUfVfWfhFYpSDTDUDZpVDdm6GiFamjFHm8DGoHoIoJoKoLo2g3g=k?kMbNbMoNoxnynRlSlTl4g5g6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9o#g$g!o#o@ [ QbRb$o%o%g'g(g)g] ^ 'o(oAnBnCn)o*o+o*g+g[k]kXbYb,o-oDnEnFnGnHn,g-g.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfp?g@ggphp{ | 3b4bipjp[g]g^g_g} ~ kplpJnKnLnmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJp
1416 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer:
1417 """Allocate device memory from a specified stream.
1419 Allocates device memory of `size` bytes on the specified `stream`
1420 using the memory resource currently associated with this Device.
1422 Note
1423 ----
1424 Device must be initialized.
1426 Parameters
1427 ----------
1428 size : int
1429 Number of bytes to allocate.
1430 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
1431 Keyword-only. The stream establishing the stream ordering semantic.
1432 Must be passed explicitly; pass ``self.default_stream`` to use
1433 the default stream.
1435 Returns
1436 -------
1437 :obj:`~_memory.Buffer`
1438 Newly created buffer object.
1440 """
1441 self._check_context_initialized() 2FmGm'B(n0mll[ymlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl
1442 return self.memory_resource.allocate(size, stream=stream) 2FmGm'B(n0mll[ymlnlolHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxl|k1g@k}kylSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHl~kal^kblIlJlKlLlMlNlOlPl
1444 def sync(self) -> None:
1445 """Synchronize the device.
1447 Note
1448 ----
1449 Device must be initialized.
1451 """
1452 self._check_context_initialized() 2UHVHWHXHYHZH0H1H2H3H4H5H6H7H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkI)A*AlImInIoIpIqIxryr^C_C`C{CFmGmEBFBGBnm$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHQlWlvnwnfm0GXlk 7eQ R
1453 handle_return(runtime.cudaDeviceSynchronize()) 2UHVHWHXHYHZH0H1H2H3H4H5H6H7H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkI)A*AlImInIoIpIqIxryr^C_C`C{CFmGmEBFBGBnm$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHQlWlvnwnfm0GXlk 7eQ R
1455 def create_graph_builder(self) -> GraphBuilder:
1456 """Create a new :obj:`~graph.GraphBuilder` object.
1458 Returns
1459 -------
1460 :obj:`~graph.GraphBuilder`
1461 Newly created graph builder object.
1463 """
1464 from cuda.core.graph._graph_builder import GraphBuilder 2IDJDompm2l3ljC4lqmKDLD5lrmsmMD6lND7lODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lUGVGWG2G3G4GhmimjmkmlmmmCmDmEmXGYGZGbFcFdF|lwmxmymzmTBAm}l6x
1466 self._check_context_initialized() 2IDJDompm2l3ljC4lqmKDLD5lrmsmMD6lND7lODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lUGVGWG2G3G4GhmimjmkmlmmmCmDmEmXGYGZGbFcFdF|lwmxmymzmTBAm}l6x
1467 return GraphBuilder._init(self.create_stream()) 2IDJDompm2l3ljC4lqmKDLD5lrmsmMD6lND7lODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lUGVGWG2G3G4GhmimjmkmlmmmCmDmEmXGYGZGbFcFdF|lwmxmymzmTBAm}l6x
1469 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray:
1470 """Create an :obj:`~cuda.core.texture.OpaqueArray` on the current device.
1472 Allocates an opaque, hardware-laid-out CUDA array for texture/surface
1473 access. The array is created in the current CUDA context, so make this
1474 device current with :meth:`set_current` before calling (mirroring
1475 :meth:`create_stream` / :meth:`create_event`).
1477 Note
1478 ----
1479 Device must be initialized.
1481 Parameters
1482 ----------
1483 options : :obj:`~cuda.core.texture.OpaqueArrayOptions`
1484 Allocation options (shape, format, channels, surface flag).
1486 Returns
1487 -------
1488 :obj:`~cuda.core.texture.OpaqueArray`
1489 Newly created opaque array.
1491 .. versionadded:: 1.1.0
1492 """
1493 from cuda.core.texture._array import _create_opaque_array 2tDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9E!EyDzDBDCDEDFDGDHDSB
1495 self._check_context_initialized() 2tDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9E!EyDzDBDCDEDFDGDHDSB
1496 return _create_opaque_array(options) 2tDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9E!EyDzDBDCDEDFDGDHDSB
1498 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray:
1499 """Create a :obj:`~cuda.core.texture.MipmappedArray` on the current device.
1501 Allocates a mipmapped CUDA array for texture/surface access across
1502 levels. The array is created in the current CUDA context, so make this
1503 device current with :meth:`set_current` before calling (mirroring
1504 :meth:`create_stream` / :meth:`create_event`).
1506 Note
1507 ----
1508 Device must be initialized.
1510 Parameters
1511 ----------
1512 options : :obj:`~cuda.core.texture.MipmappedArrayOptions`
1513 Allocation options (shape, format, channels, levels, surface flag).
1515 Returns
1516 -------
1517 :obj:`~cuda.core.texture.MipmappedArray`
1518 Newly created mipmapped array.
1520 .. versionadded:: 1.1.0
1521 """
1522 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2#EsFtFuF$EvFADDDSB
1524 self._check_context_initialized() 2#EsFtFuF$EvFADDDSB
1525 return _create_mipmapped_array(options) 2#EsFtFuF$EvFADDDSB
1527 def create_texture_object(
1528 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None
1529 ) -> TextureObject:
1530 """Create a :obj:`~cuda.core.texture.TextureObject` on the current device.
1532 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` /
1533 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d
1534 :obj:`~cuda.core.Buffer`, wrapped in a
1535 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for
1536 kernel-side sampled reads. The object is created in the current CUDA
1537 context, so make this device current with :meth:`set_current` before
1538 calling (mirroring :meth:`create_stream` / :meth:`create_event`).
1540 Note
1541 ----
1542 Device must be initialized.
1544 Parameters
1545 ----------
1546 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1547 The memory backing the texture.
1548 options : :obj:`~cuda.core.texture.TextureObjectOptions`
1549 Sampling state (address/filter/read modes, normalization, etc.).
1551 Returns
1552 -------
1553 :obj:`~cuda.core.texture.TextureObject`
1554 Newly created texture object.
1556 .. versionadded:: 1.1.0
1557 """
1558 from cuda.core.texture._texture import _create_texture_object 2tDuDvDwDxDCD6zDD7zEDFDGDHDwFSB
1560 self._check_context_initialized() 2tDuDvDwDxDCD6zDD7zEDFDGDHDwFSB
1561 return _create_texture_object(resource, options) 2tDuDvDwDxDCD6zDD7zEDFDGDHDwFSB
1563 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject:
1564 """Create a :obj:`~cuda.core.texture.SurfaceObject` on the current device.
1566 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a
1567 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for
1568 kernel-side typed load/store. The backing array must have been created
1569 with ``is_surface_load_store=True``. The object is created in the
1570 current CUDA context, so make this device current with
1571 :meth:`set_current` before calling (mirroring :meth:`create_stream` /
1572 :meth:`create_event`).
1574 Note
1575 ----
1576 Device must be initialized.
1578 Parameters
1579 ----------
1580 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1581 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with
1582 ``is_surface_load_store=True``.
1584 Returns
1585 -------
1586 :obj:`~cuda.core.texture.SurfaceObject`
1587 Newly created surface object.
1589 .. versionadded:: 1.1.0
1590 """
1591 from cuda.core.texture._surface import _create_surface_object 2yDzD5zADBDSB
1593 self._check_context_initialized() 2yDzD5zADBDSB
1594 return _create_surface_object(resource) 2yDzD5zADBDSB
1597cdef inline int Device_ensure_cuda_initialized() except? -1:
1598 """Initialize CUDA driver and check version compatibility (once per process)."""
1599 global _is_cuInit
1600 if _is_cuInit is False: 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1601 with _lock, nogil:
1602 HANDLE_RETURN(cydriver.cuInit(0))
1603 _is_cuInit = True
1604 try:
1605 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1606 except ImportError:
1607 pass
1608 else:
1609 warn_if_cuda_major_version_mismatch()
1610 return 0 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1613cdef inline int Device_resolve_device_id(device_id) except? -1:
1614 """Resolve device_id, defaulting to current device or 0."""
1615 cdef cydriver.CUdevice dev
1616 cdef cydriver.CUcontext ctx
1617 cdef cydriver.CUresult err
1618 if device_id is None: 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSu1GIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1619 with nogil: 2a vrIDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrArBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qKpLp#f2f1eLfMfre$f3f2eNfOfse%f4f3ePfQfte'f5f4eRfSfue(f6f5eTfUfve)f7f6eVfWfweMp_qNpOpPpQpRpSpTpUpVpWpEFFFXphFYpSDTDUDZpVDUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pGFbr_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm:F|lwmanxmymzmTBAm}l*f+f;F,f-f.f/f:f;fUn=f8fFf?f9fHF@fIF!f[f]f^f_f`f{f|f}f~fag!Bl m n o p q r s t u v w x y z A B C D E F G H I J K L M N JFKFLFMFNFOF2pcrFmGmiFPFBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamjFHm8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVmcbEBFBYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noC+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXfQl_FwrYfbn3mcndr3pdnenWlvnwnfmiG(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm=Ctouo1mZf0f(mXlk 7e~y~lgmazOEQEze8e9e,BAe4pVnIckFJctnKcunLc`FMc{FNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0cWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n]C|F3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+FhC,FgF-F.Frg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0gtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9EjGkGlGmGnGoG!E#EsFtFuF$EpGqGrGsGHBIBJBKBLBMBvFNBOBPBQBRByDzD5zADBDCD6zDD7zEDFDGDHDwFSBVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,k
1620 err = cydriver.cuCtxGetDevice(&dev) 2a vrIDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrArBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qKpLp#f2f1eLfMfre$f3f2eNfOfse%f4f3ePfQfte'f5f4eRfSfue(f6f5eTfUfve)f7f6eVfWfweMp_qNpOpPpQpRpSpTpUpVpWpEFFFXphFYpSDTDUDZpVDUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pGFbr_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm:F|lwmanxmymzmTBAm}l*f+f;F,f-f.f/f:f;fUn=f8fFf?f9fHF@fIF!f[f]f^f_f`f{f|f}f~fag!Bl m n o p q r s t u v w x y z A B C D E F G H I J K L M N JFKFLFMFNFOF2pcrFmGmiFPFBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamjFHm8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVmcbEBFBYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noC+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXfQl_FwrYfbn3mcndr3pdnenWlvnwnfmiG(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm=Ctouo1mZf0f(mXlk 7e~y~lgmazOEQEze8e9e,BAe4pVnIckFJctnKcunLc`FMc{FNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0cWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n]C|F3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+FhC,FgF-F.Frg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0gtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9EjGkGlGmGnGoG!E#EsFtFuF$EpGqGrGsGHBIBJBKBLBMBvFNBOBPBQBRByDzD5zADBDCD6zDD7zEDFDGDHDwFSBVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,k
1621 if err == cydriver.CUresult.CUDA_SUCCESS: 2a vrIDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrArBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qKpLp#f2f1eLfMfre$f3f2eNfOfse%f4f3ePfQfte'f5f4eRfSfue(f6f5eTfUfve)f7f6eVfWfweMp_qNpOpPpQpRpSpTpUpVpWpEFFFXphFYpSDTDUDZpVDUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pGFbr_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm:F|lwmanxmymzmTBAm}l*f+f;F,f-f.f/f:f;fUn=f8fFf?f9fHF@fIF!f[f]f^f_f`f{f|f}f~fag!Bl m n o p q r s t u v w x y z A B C D E F G H I J K L M N JFKFLFMFNFOF2pcrFmGmiFPFBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamjFHm8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVmcbEBFBYl'D*D;B/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noC+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXfQl_FwrYfbn3mcndr3pdnenWlvnwnfmiG(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm=Ctouo1mZf0f(mXlk 7e~y~lgmazOEQEze8e9e,BAe4pVnIckFJctnKcunLc`FMc{FNc`gOcegWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0cWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6nfg7n8n9nsDgghg=Bigjgkglgmgngog!npg?B@B[Bqg#nlb$n]C|F3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+FhC,FgF-F.Frg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0gtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9EjGkGlGmGnGoG!E#EsFtFuF$EpGqGrGsGHBIBJBKBLBMBvFNBOBPBQBRByDzD5zADBDCD6zDD7zEDFDGDHDwFSBVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,k
1622 return int(dev) 2IDxFyFzFAFJDompm2l3ljC4lqmKDLD5lrm-msmMD6l.mND7l/mODtmumvm8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lzrArBF,q-q.q/q:mQDCFDF;m=m?m@m[m:q;q=q?q@q[q]q^qKpLp#f2f1eLfMfre$f3f2eNfOfse%f4f3ePfQfte'f5f4eRfSfue(f6f5eTfUfve)f7f6eVfWfweMp_qNpOpPpQpRpSpTpUpVpWpEFFFXphFYpSDTDUDZpVDUlVlzoAodm]m^m`q{q|qMnNnOn}qPnQnRnSn~qarTn0pGFbr_m`m{m|m}m~mhm)mimjmkm*mlmmmCmDmEm:F|lwmanxmymzmTBAm}l*f+f;F,f-f.f/f:f;fUn=f8fFf?f9fHF@fIF!f[f]f^f_f`f{f|f}f~fag!Bl m n o p q r s t u v w x y z A B C D E F G H I J K L M N JFKFLFMFNFOFiFPFjF8DQFRFSFTFUFVF2mWFXFYFZF0F1F2FVmEBFBYl'D*D;B/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;CBmQl_Fwrbn3mcndr3pdnenWlvnwnfmiG(A(iWmvh4m)i5m*i6m+i7m,iXm+m8m-ifn]y9m^ygn_yhn`yinkBjn{y!m|ykn}yln.i#mwhmn/inn:ion;ipn=i$mklqn?i@irnsnYm%m'm=C(mXlk ~y~lgmazOEQE,B4pVnIckFJctnKcunLc`FMc{FNc`gOcWnXnYnZn0n1n2n3n4n5nPcQcRcScTc3zUcVcWcXcYcZc0cWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd!eCd#eDdEd$eFd%eGdBeCeg c h d MbNb'e(e)e*e+e,e-e6bdb7bebS O T P DeEeOb= Pb? Fe.e/e8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@e[eRd]eSdKeLe%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3d^e_e+bfb,bgbMe4dNe5dOePei e j f XbYb`e{e|e}e~eafbf-bhb.bib6dZb7d0bQeRe1b_ 2b` Secfdf/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfifjf+dkf,dXeYe@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^dlfmf`bjb{bkb_d`dnf{dof|d}d~daeZebe0ecepfdeqfeerffesfgetfheufievfjewfkexfleyfmenezfoeAfpeqerD6n7n8n9nsD!n#n$n]C|F3FeF4F5F6F7FfF8F9F!F#F$F%F'F(F)F*F+FhC,FgF-F.Frg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfYgZg0gtDuDvDwDxD7ElFmFnFoFpFqF6xrFdz8E9EjGkGlGmGnGoG!E#EsFtFuF$EpGqGrGsGHBIBJBKBLBMBvFNBOBPBQBRByDzD5zADBDCD6zDD7zEDFDGDHDwFSBWBXBYBZB0B1B2B3B4B5B(B)B*B+B
1623 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1624 with nogil: 2a vr2pcrFmGmBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamHmcb|b}bnz~bacnm)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfYftouo1mZf0fk 7eze8e9eAeegfggghg=Bigjgkglgmgngogpg?B@B[BqglbVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k
1625 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a vr2pcrFmGmBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamHmcb|b}bnz~bacnm)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfYftouo1mZf0fk 7eze8e9eAeegfggghg=Bigjgkglgmgngogpg?B@B[BqglbVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k
1626 assert <void*>(ctx) == NULL 2a vr2pcrFmGmBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamHmcb|b}bnz~bacnm)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfYftouo1mZf0fk 7eze8e9eAeegfggghg=Bigjgkglgmgngogpg?B@B[BqglbVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k
1627 return 0 # cudart behavior 2a vr2pcrFmGmBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A%BUB7D2zVBZmbbamHmcb|b}bnz~bacnm)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfYftouo1mZf0fk 7eze8e9eAeegfggghg=Bigjgkglgmgngogpg?B@B[BqglbVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k
1628 else:
1629 HANDLE_RETURN(err)
1630 elif device_id < 0: 2a BrCrDrErFrGrHrIr2lJr3lKrjCLr4lMrNrOrPr5lQrRrSrTrUr6lVrWrXr7lYrZr0r1r2r3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesfsgshs,qis-qjs.qks/qlsmsnsospsprqsqrrssstsusvsws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDdttretft_qgturhtitjtktltmtntotptqtrtstttutvtwtxtytztYpAtSDBtCtDtZpEtVDFtUlGtVlHtItJtKtLtMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t1t2t3t4t5tbr6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i.t%i|l/t:t;t=t?t@tWD[t}l]t*f+f^tvG,f@y-f-B.fkC/f:f;f_t=f8fFf?f9f@f!f[fwG]f^f_f`f{f|f}f~fag`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'n|t}t~taubucuduFmGmXDYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4D.A~C5DeG6Dfu8Dgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psuYl(D)D+D,DbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgll[y.Dtuuuvu/DwuBmfG1pxu|pgGczhG'i:D;D=D?Dyu@D[Dzu]D^D_D`D{D|DAuBuCu}D~DDuEuaEbEcEFudEeEfEgEhEiEGuHujEIukEJuKulEmEnEoEpEqELurEsEtEuEMuvEwENuxEyEOuzEAEBECEDEEEPuQuFEGEHE[iIEJEKELEMENEOEPEQERuzeRE}p~paqbqcqdqeqfqgqhqiqjqkqSu1GIckFJcTuKcUuLcMcNc`gVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6ElbpxqxrxbzsxtxuxeFvxwxxxyxzxfFAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYx7EZx0x1x2x3x4x5x6x7x8xdz9x!x#x$x%x'x(x)x*x+x#E,x-x.x/x:x;x=x?x@xHB[xIB]xJB^xKB_xLB`xMB{x|xNB}xOB~xPBayQBbyRBcydyey5zfygyhyiy6zjyky7zlymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1631 raise ValueError(f"device_id must be >= 0, got {device_id}")
1632 return device_id 2a BrCrDrErFrGrHrIr2lJr3lKrjCLr4lMrNrOrPr5lQrRrSrTrUr6lVrWrXr7lYrZr0r1r2r3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesfsgshs,qis-qjs.qks/qlsmsnsospsprqsqrrssstsusvsws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDdttretft_qgturhtitjtktltmtntotptqtrtstttutvtwtxtytztYpAtSDBtCtDtZpEtVDFtUlGtVlHtItJtKtLtMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t1t2t3t4t5tbr6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i.t%i|l/t:t;t=t?t@tWD[t}l]t*f+f^tvG,f@y-f-B.fkC/f:f;f_t=f8fFf?f9f@f!f[fwG]f^f_f`f{f|f}f~fag`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'n|t}t~taubucuduFmGmXDYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4D.A~C5DeG6Dfu8Dgu9Dhuiu!Djukulumunuoupu#D$D%Dqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psuYl(D)D+D,DbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgll[y.Dtuuuvu/DwuBmfG1pxu|pgGczhG'i:D;D=D?Dyu@D[Dzu]D^D_D`D{D|DAuBuCu}D~DDuEuaEbEcEFudEeEfEgEhEiEGuHujEIukEJuKulEmEnEoEpEqELurEsEtEuEMuvEwENuxEyEOuzEAEBECEDEEEPuQuFEGEHE[iIEJEKELEMENEOEPEQERuzeRE}p~paqbqcqdqeqfqgqhqiqjqkqSuIckFJcTuKcUuLcMcNc`gVuOcWuXuYuZu0u1u2u3u4u5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwVEWwXwYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w^w2E_w`w{w|w}w3E~waxbxcxdx4Eexfxgxhxix5Ejxkxlxmxnxox6ElbpxqxrxbzsxtxuxeFvxwxxxyxzxfFAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYx7EZx0x1x2x3x4x5x6x7x8xdz9x!x#x$x%x'x(x)x*x+x#E,x-x.x/x:x;x=x?x@xHB[xIB]xJB^xKB_xLB`xMB{x|xNB}xOB~xPBayQBbyRBcydyey5zfygyhyiy6zjyky7zlymynyoypyqyrysytyuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1635cdef inline list Device_ensure_tls_devices(cls):
1636 """Ensure thread-local Device singletons exist, creating if needed."""
1637 cdef int total
1638 try: 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1639 return _tls.devices 2a vrIDBrxFCryFDrzFErAFFrJDGromHrpmIr2lJr3lKrjCLr4lMrqmNrKDOrLDPr5lQrrmRr-mSrsmTrMDUr6lVr.mWrNDXr7lYr/mZrOD0rtm1rum2rvm3r8l4r9l5r!l6r#l7r$l8r%l9r'l!r(l#r)l$r*l%r+l'r,l(r-l)r.l*r/l+r:l,r;l-r=l.r?l/r@l:r[lPD]l;r^l=r_l?r`l@r{l[rzr]rAr^r8z_r`r6p9z{r|r!z}r#z~r$zas1h2h3hbs4h5h6h%zcsdsesBFfsgshs,qis-qjs.qks/qls:mmsQDnsCFosDFpsprqsqrrs;mss=mts?mus@mvs[mws:qxs;qys=qzs?qAs@qBs[qCs]qDs^qEsrrFsGsHsIs'zJs(zKs)zLs*zMs+zNs,zOsKpPsLpQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satsrbt-zct.zRDMpdttretft_qgturhtNpitOpjtPpktQpltRpmtSpntotptqtrtTpstUpttVputWpvtEFwtFFxtXpythFztYpAtSDBtTDCtUDDtZpEtVDFtUlGtVlHtzoItAoJtdmKt]mLt^mMt`qNt{qOt|qPtMnQtNnRtOnSt}qTtPnUtQnVtRnWtSnXt~qYtarZtTn0t0p1t2t3tGF4t5tbr6t7t_m8t`m9t{m!t|m#t}m$t%t't(t)t~m*t+t,t-tQiRiSiTiUiVihmWi)mXiimYijmZikm0i*m1ilm2imm3iCm4iDm5iEm6i7i8i9ibF!icF#idF$i:F.t%i|l/twm:tan;txm=tym?tzm@tTBWDAm[t}l]t*f+f;F^tvG,f@y-f-B.fkC/f:f;fUn_t=f8fFf?f9fHF@fIF!f[fwG]f^f_f`f{f|f}f~fag!B`t7pW l #BX $Bm CoY n .BZ o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 =F6 7 ?F8 9 @F! # [F$ % ]F' ( ^F) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p{t. K )Axb*AabDB/ L /B: M Fo; N xrybyrzb^CAb_CBb`CCb{CDb'nJF|tKF}tLF~tMFauNFbuOFcudu2pcrFmGmiFXDPFYD|CZDaG0D_BeubG1D}C2D:BcG3DdG4DBo/z:zcl;zpzezqz6B=z?z@z7Brz[zdl]z^zfz-k_zel_k`z{zsz|zgz}z~zaAbAtzhzuzizvzwzxzcAyzzz.kdAjzeAfA8BgAhAiAjAkAlAmAnAoApAflqArAsAAztABzCzuAvADzwAxAyAEzFzzAAABACADAGzHzEAIzFAGAJzHAIAJAKAKzLzLAMANAOA`kMzglPANzQAOzRAPzQzRzSATAUAVA9BWAXAhlYAilZA0A1A2Akz3Alz4A5A6A{kSzemTzUz7A8AVz9A!Amz#A$Ajl/k%A'A.A%B~C5DeG6DUB7D2zVBZmbbamjFfuHm8DguQF9DRFhuSFiuTF!DUFjuVFku2mluWFmuXFnuYFouZFpu0F#D1F$D2F%DVmqu`B{B|B}B~BaCbC#pcCdCeCfCgC$pNkOk'Bb (nxe0myePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`pyG{psucbEBFBYl'D(D)D*D+D;B,D/A|b:A;A=A}b?A@A[Anz]A^A_A`A{A|A}A~b~AaBbBcBdBeBfBgBhBaciBjBaDbcccdc-DecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdglCGBnmmC)nnC*noCll[y.Dtuuuvu/Dwu+npC,n-nqC.n/n:n;n=nrCsCtC?nuCvCwCxCyCzC@n[nACBCCCDCECFC]n^nGCHCICJCKC_n`nLCMCNCOCPCQCRCSC{nTC|nUC}nVC~nWCaobocoXCdoYCZC0C1C2C3C4C5C6C7Ceofogohoiojo8C9C!C#Cko$Clo%Cmonooo'C(C)Cpo*C+C,C-C.C/Cqoro:Cso;CBmXffG1pQlxu|pgGczhG'i_F:D;DwrYfbn=D3m?Dcnyudr@D3p[Ddnzuen]DWl^Dvn_Dwn`Dfm{DiG(A|D(iAuWmBuvhCu4m}D)i~D5mDu*iEu6maE+ibE7mcE,iFuXmdE+meE8mfE-igEfnhE]yiE9mGu^yHugnjE_yIuhnkE`yJuinKukBlEjnmE{ynE!moE|ypEknqE}yLulnrE.isE#mtEwhuEmnMu/ivEnnwE:iNuonxE;iyEpnOu=izE$mAEklBEqnCE?iDE@iEErnPusnQuYmFE%mGE'mHE[i=Ctouo1mZf0f(mIEXlJEk 7e~yKE~lLEgmMEazNEOEPEQERuze8e9e,BREAe4p}p~paqbqcqdqeqfqgqhqiqjqkqVnSuIckFJctnTuKcunUuLc`FMc{FNc`gVuOcegWnWuXnXuYnYuZnZu0n0u1n1u2n2u3n3u4n4u5n5uPcQcRcScTc3zUcVcWcXcYcZc0c:k6u;k7uWz1cXz2cYz3cZz4c0z5c1z6c9y7c!y8c#y9c$y!c%y#c'y$c(y%c)y'c*y(c+y)c,y*c-y+c.y,c/y-c:y.c;y/c=y:c?y;cSE=cTE?c+A@clB[cmB]cnB^coB_cpB`cqB{c,A|crB}csB~ctBaduBbdvBcdwBdd-AedxBfdyBgdzBhdABidBBjdCBkdUEldbDmdcDnddDodeDpdfDqdgD4zhDrdiDsdjDtdkDudlDvdmDwdnDxdoDydpDzdqDAdBd?CEbFb@C5b]i[CGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwrDVE6nWwfg7nXw8nYwZw0w1w2wWE3w4w5w6wXE7wYE8w9w!w#w$w%wZE'w0E(w)w*w+w1E,w-w.w/w:w;w=w?w@w[w]w9n^wsD2Egghg=Big_w`w{w|w}w3E~waxbxcxdx4Eexfxjgkglgmgngog!ngxpg?B@B[Bqg#nhxix5Ejxkxlxmxnxox6Elb$npxqxrxbz]Csx|Ftx3FuxeFvx4Fwx5Fxx6Fyx7FzxfFAx8FBx9FCx!FDx#FEx$FFx%FGx'FHx(FIx)FJx*FKx+FLxhCMx,FNxgFOx-FPx.FQxrg5psgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gtDUxuDVxvDWxwDXxxDYx7EZxlF0xmF1xnF2xoF3xpF4xqF5x6x7xrF8xdz9x8E!x9E#xjG$xkG%xlG'xmG(xnG)xoG*x!E+x#E,xsF-xtF.xuF/x$E:xpG;xqG=xrG?xsG@xHB[xIB]xJB^xKB_xLB`xMB{xvF|xNB}xOB~xPBayQBbyRBcyyDdyzDey5zfyADgyBDhyCDiy6zjyDDky7zlyEDmyFDnyoypyGDqyryHDsywFtySBuy%E'Evywyxyyyzy(E)E*E+EAy,EBy-ECyDyEyFy.E/EGyHy:E;E=EVkWkWBXkYkZk0k1k2kXBYBZB3k0B4k1B5k6k7k2B8k9k!k#k$k%k3B'k(k4B5B)k(B)B*k*B+B+k,kIy?EJyiCKy@E[ELy]EMyNyOy^E_E`EPyQyRySyTyUy{EVyWyXyYy|E}EZy0y1y~E2y3y4y5y6y7y8y
1640 except AttributeError: 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1641 with nogil: 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1642 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1643 devices = _tls.devices = [] 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1644 for dev_id in range(total): 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1645 device = super(Device, cls).__new__(cls) 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1646 device._device_id = dev_id 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1647 device._memory_resource = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1648 device._has_inited = False 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1649 device._properties = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1650 device._resources = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1651 device._uuid = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1652 device._context = None 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1653 devices.append(device) 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y
1654 return devices 2a BrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r6p{r|r}r~ras1h2h3hbs4h5h6hcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQs#f2f1e7hLfMf8hRsSsTsUsre9h!h#h$h%hVsWs$f3f2e'hNfOf(hXsYsZs0sse)h*h+h,h-h1s2s.h/h:h3s;h=h?h@h[h]h^h_h`h%f4f3e{hPfQf|h4s5s6s7ste}h~haibici8s9s'f5f4ediRfSfei!s#s$s%suefigihiiiji's(s(f6f5ekiTfUfli)s*s+s,sveminioipiqi-s.s)f7f6eriVfWfsi/s:s;s=swetiuiviwixi?s@syiziAiBiCiDiEiFiGiHiIiJi[sKiLiMiNiOiPi]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-tQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i.t%i/t:t;t=t?t@t[t]t*f+f^t,f-f.f/f:f;f_t=f8fFf?f9f@f!f[f]f^f_f`f{f|f}f~fag`t7pW l X m CoY n Z o %n0 p 1 q 1f2 r mbnbobpbqbrbsbtbubvbwbZl3 s 4 t 5 6 7 8 9 ! # $ % ' ( ) u v w x y z A B C D E F Do* G + H Eo, I ,m- J 8p9p!p. K xbab/ L : M Fo; N xrybyrzbAbBbCbDb'n|t}t~taubucudueuBocldl-kel_k.kfl`kglhlil{kemjl/kZmbbamfuHmguhuiujukulumunuoupuqu#p$pNkOkb xeyePkQkRkruSkTkUk%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{psucb|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcbgcgdgnm)n*nlltuuuvuwu+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoXfxu|p'iYfyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQu[itouo1mZf0fk 7eRuze8e9eAe}p~paqbqcqdqeqfqgqhqiqjqkqSuIcJcTuKcUuLcMcNcVuOcegWuXuYuZu0u1u2u3u4u5uPcQcRcScTcUcVcWcXcYcZc0c6u7u1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdEbFb5b]iGb^iml!e8ulqmq_iGoHoIo`i9u!u#u$uCd#e{i|iDd%unq'u(unlEdoq}iol$e)upqIm~iJoKoLoaj*u+u,u-uFd%ebjcjGd.uqq/u:uBe2g3gxhdjejfjCeyhzhgjhjHbg plIb=k?kJbqlrlsltlc h ulKbLbd vlwlxlMbNb'e(e)e*e+eij,ejjMoNokj;u=u?u-eljmj@u[u]u{g|k6brq|gxnyn}gsqtquqvqdb7bwq~gahebxqyqzqGf1gS Jm0lHfRlSlTlIfKmLmMmNmO T OmJfKfP Pm1lQmRmAhDe4g5gBhnjojpjEeChDhqjrj6g@kObOozn7gPoQo8gRoSoToUo= PbVo9g!g? WoXoYoZo0o1o2o3o4o5o6o7o8o9oFe#g$gsjtjujEhFhvjwjxj.e^uyj!o#ozj_u`u{u/eAjBj|u}u~uavbvcvdvevfvgvhviv8bHdId9b@ [ !bJdKdLdMdNd#b$bOdPdQdGeQbRbHe:e;e=eIeJe?e@eCj[ejvDj$o%oEjkvlvmvnvRd]eFjGjSdovpvqvKe%g'gHjIjJjKjLjLe(g)gMjNjOjGhPjQj%bTdUd'b] ^ (bVdWdXdYdZd0d)b*b1d2d3dRj^eSj'o(oTjrvsvtv_eUjVjuvvvbh}k+bAqvochAnBnCndhBqCqDqEqfb,bFqehfhgbGqHqIqwvHhylMexvJqyvIh)o*o+oJhzvAvBvCv4dNeKhLh5dDvKqEvFvOe*g+gMhWjXjYjPeNhOhZj0jSbi zlTb[k]kUbAlBlClDle j ElVbWbf FlGlHlXbYb`e{e|e}e~e1jaf2j,o-o3jGvHvIvbf4j5jJvKvLvgh~k-bLqhhDnEnihMqNqOqPqhb.bQqjhkhibRqSqTqqhal6derworhFnGnHnshfrgrhrirZb7djrthuh0bkrxolrmrPhQe,g-gQh6j7j8jReRhSh9j!j.g^k1b.oIn/g/o:o:g;o=o?o@o_ 2b[o;g=g` ]o^o_o`o{o|o}o~oapbpcpdpepfpSe?g@g#j$j%jThUh'j(j)jcfMv*jgphp+jNvOvPvdf,j-jQvRvSvTvUvVvWvXvYvZv0v1v/b8d9d:b{ | ;b!d#d$d%d'd=b?b(d)d*dTe3b4bUeefffgfVeWehfif.jjf2v/jipjp:j3v4v5v6v+dkf;j=j,d7v8v9vXe[g]g?j@j[j]j^jYe^g_g_j`j{jVh|j}j@b-d.d[b} ~ ]b/d:d;d=d?d@d^b_b[d]d^d~jlfakkplpbk!v#v$vmfckdk%v'vlhbl`bUqyomhJnKnLnnhVqWqXqYqjb{bZqohphkb0q1q2q(vnrorQ R U V _d`dekIlnf)v3qSmfkmpnpopgk*v+v,v-v{dofhkik|d}d.v~dae/v:v4q;v=vWhJlZe?v5q@vXhppqprpYh[v]v^v_vbe0eZh0hce`v6q{v|vjkKlpf}v7qTmkksptpuplk~vawbwcwdeqfmknkeedw8qewfwokLlrfgw9qUmpkvpwpxpqkhwiwjwkwfesfrkskgelw!qmwnwtkMltfow#qbmukypzpApvkpwqwrwswheufwkxkietw$quwvwykNlvfww%qcmzkBpCpDpAkxwywzwAwjewfBkCkkeBw'qCwDwDkOlxfEw(qFwEkEpFpGpFkGwHwIwJwleyfGkHkmeneKw)qLwMwIkPlzfNw*qOwJkHpIpJpKkPwQwRwSwoeAfLkMkpeqeTw+qUwVwWwfgXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^wgghgig_w`w{w|w}w~waxbxcxdxexfxjgkglgmgngoggxpgqghxixjxkxlxmxnxoxlbpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgBfCfDfEfRxSxTxYgZg0gUxVxWxXxYxZx0x1x2x3x4x5x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,kIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y